有关Kendo Mobile中的MVVM和数据绑定的问题:
account.js
:
define([], function () {
return {
userPhone: 111
};
});
index.html
:
<p>Phone: <span id="test-span" data-bind="html: userPhone"></span>.</p>
home-view.js
:
define(["kendo", "app/account"], function (kendo, account) {
var viewModel = kendo.observable({
userPhone: account.userPhone
});
return {
show: function() {
viewModel.set("userPhone", account.userPhone); // LINE A
account.userPhone = "222"; // LINE B
},
viewModel: viewModel
}
});
#test-span
显示(空)#test-span
显示“ 111”#test-span
显示(空)我明白为什么#2会表现出这种方式。我只是不明白为什么#1和#3会像他们一样表现。我认为MVVM和数据绑定的全部要点是,我可以account.userPhone
不必进行操作就可以更新并全局更新视图viewModel.set
。
假设我有home-view2.js
,home-view3.js
等等,我该如何更新所有viewModel来更改帐户属性?
B行是否工作取决于所使用的框架,在这种情况下,KendoUI不是基于脏检查的。这意味着account.userName
直接设置将不起作用,需要通过在模型类(如A行)中调用特殊的setter来完成更新。
例如,AngularJs基于脏检查,因此如果将B线放在控制器上或在内部调用$apply
,B线就可以工作,并且不需要像A线这样的代码。
角度脏检查的工作方式是拍摄普通javascript对象的快照,然后在适当的时候(在事件回调,ajax回调和setTimeouts上)拍摄另一个快照。
如果两个快照不同,account.userName
则会更新所有观察到的组件,例如DOM元素-这就是与普通javascript对象进行角度双向绑定的工作方式。
看看基于Kendo小部件的Angular库的angular KendoUI。
如果您对脏检查及其工作方式感兴趣,请查看Angular作者的播客,以及他们的回答,在其中与Knockout或Backbone等框架进行了比较。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句