or
var Contact = kendo.data.Model.define({ id: 'id', fields: { ... }, load: function(id) { var that = this; return $.ajax(...).done(function(data) { that.accept(data); }); }, save: function() { return $.ajax(...); } });var id=153, viewModel = kendo.observable({ contact = new Contact({});});contact.load(id); //does not raise a change event on the viewModelvar BaseModel = Model.define({ accept: function(data) { var that = this; //Call the base accept method Model.fn.accept.call(that, data); //Trigger a change event on the parent observable (possibly a viewModel) if ($.type(that.parent) === 'function') { var observable = that.parent(); if (observable instanceof kendo.Observable) { $.each(Object.keys(observable), function(index, key) { if(observable[key] instanceof that.constructor && observable[key].uid === that.uid) { //we have found our nested object in the parent observable observable.trigger(CHANGE, { field: key }); //otherwise UI won't be updated via MVVM return false; //once we have found the key and triggered the change event, break out of iteration } }); } } }});var BadModel = kendo.data.Model.define({ id: 'id', fields: { id: { type: 'string', }, date: { type: 'date', } } }), now = new Date(), badObject = new BadModel({ id: '1234567890', date: now.toISOString() });expect(badObject).to.have.property('date').that.is.a('string'); //Mocha test badObject.set('date', now.toISOString()); expect(badObject).to.have.property('date').that.is.an.instanceof(Date); //Mocha testvar FixedModel = Model.define({ ... init: function(data) { var that = this; $.each(Object.keys(data), function(index, key) { if ($.type(that.fields[key]) === 'object') { data[key] = that._parse(key, data[key]); } }); Model.fn.init.call(that, data); }});