也许我对Kendo的MVVM实现的概念有误解,但是...我有一个简单的Kendo UI Mobile view
,它与视图模型数据绑定:
var myViewModel = kendo.observable({
myEntity: null,
onViewShow: function (e) {
var bindingEntity = myStaticDataSource[0];
myViewModel.set("myEntity", bindingEntity);
}
});
myStaticDataSource
是作为简单JavaScript对象的“实体”的静态数组,具有诸如name
或的字段description
。
视图及其输入字段绑定到视图模型:
<div data-role="view" data-layout="default" data-model="myViewModel" data-bind="events: { show: onViewShow }">
<form>
<ul data-role="listview" data-style="inset">
<li>
<label>
Name
<input type="text" data-bind="value: myEntity.name" />
</label>
</li>
</ul>
</form>
</div>
当用户更改输入字段时,name
数据绑定视图模型实体中的相应字段(例如)会更新myEntity
。但是:我本来希望的是实体中的实体也myStaticDataSource
被更新了,因为我没有克隆对象。但这不是!它的值保持原始值。为什么是这样?我是否缺少有关Kendo的MVVM处理的信息?
这是Kendo Observable对象和数组的副作用。当您ObservableObject
使用.set()
方法将属性分配给时,它还希望使该分配的项目也可观察。您的项目myStaticDataSource
可能是普通的JS对象,而不是Kendo Observables,因此KendoObservableObject
为您包装了新对象。这意味着对象不再相同。
这可能更有意义:
var items = [{name: "item one"}];
var vm = kendo.observable({item: undefined});
vm.set("item", items[0]);
vm.item === items[0]; // returns FALSE
items[0] instanceof kendo.data.ObservableObject // returns FALSE
vm.item instanceof kendo.data.ObservableObject // returns TRUE
var items = kendo.observable([{name: "item one"}]);
var vm = kendo.observable({item: undefined});
vm.set("item", items[0]);
vm.item === items[0]; // returns TRUE
items[0] instanceof kendo.data.ObservableObject // returns TRUE
vm.item instanceof kendo.data.ObservableObject // returns TRUE
为此的“修复”是执行以下任一操作:
制作myStaticDataSource
一个剑道DataSource
,它将使您放入剑道的所有物品都变成剑道ObservableObject
。
var myStaticDataSource = new kendo.data.DataSource({
data: [
{name: "Bob"}
]
};
制作myStaticDataSource
一个剑道ObservableArray
,它将使您放入其中的所有物品ObservableObject
var myStaticDataSource = kendo.observable([
{name: "Bob"}
]);
使myStaticDataSource
数组中的每一项ObservableObject
var myStaticDataSource = [
kendo.observable({name: "Bob"})
];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句