HTML5 Zone is brought to you in partnership with:

My name is Sagar Ganatra and I'm from Bangalore, India. I'm currently employed with Adobe India and I work there as a ColdFusion Engineer. At Adobe, I have worked on various features of ColdFusion and ColdFusion Builder. I'm very much passionate of web technologies and have a very good understanding of jQuery, Flex, HTML5, Java and of course ColdFusion. Sagar H is a DZone MVB and is not an employee of DZone and has posted 39 posts at DZone. You can read more from them at their website. View Full User Profile

Using Model-View ViewModel Design Pattern in Kendo UI

07.09.2012
| 2925 views |
  • submit to reddit

Kendo UI is completely new to me and I got introduced to it when Brandon Satrom left Microsoft and joined the Kendo UI team. I had interacted with him when I was working on jQuery ‘Pinify’ plugin. Kendo UI is a HTML5, jQuery based framework for building both web and mobile applications. It not only provides a set of UI widgets and other data visualization components but also a framework for data binding, animation and drag-and-drop. Whilst I was looking into the framework I stumbled upon the Mode-View ViewModel (MVVM) design pattern built into it.

This design pattern (MVVM) helps you separate the Model (data) from the View. The ViewModel part of MVVM exposes the data objects which is consumed by the view and if the user changes the data in the view, the model will be updated with the new data.

<script src="../../js/jquery.min.js" />
<script src="../../js/kendo.all.min.js" />

<script>
$('document').ready(function(){
var viewModel = kendo.observable({
fname: "Sagar",
lname: "Ganatra",
fullname: function() {
return this.get("fname") + ' ' + this.get("lname");
}
});
kendo.bind($('form#testView'),viewModel);
});
</script>

In the above code, I'm creating a viewModel object that defines the data which will be consumed by the view. The View-Model object is created by calling the function kendo.observable, passing a JavaScript object. Here the keys firstname and lastname contain string data and fullname refers to a function which returns fullname by concatenating firstname and lastname.

Here’s the HTML form that would consume the data defined in the ViewModel:

<form id="testView">
Firstname: <input id="firstName" type="text" data-bind="value: fname"><br/>
Lastname: <input id="lastName" type="text" data-bind="value: lname"><br/>
Fullname: <input id="fullname" type="text" data-bind="value: fullname"><br/>
<input type="submit">
</form>

 This is a simple HTML form, but one thing to note here is the use of data-bind attributes. The data-bind attribute specifies the key to which it will be bound to in the ViewModel. Now that the View and the ViewModel are defined, they can be bound by calling the method kendo.bind($('form#testView'),viewModel).

When the page is loaded you'll be able to see values from the ViewModel being shown in the form fields. Now when a user changes the values it will be updated in the ViewModel i.e. when you change the firstname and lastname values it will be updated in the viewModel object and the fullname will be assigned the new value.

Published at DZone with permission of Sagar H Ganatra, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)