也许我对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 对象,这些对象被称为 "entities",它们具有像 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>
当用户更改输入字段时,数据绑定的视图模型实体
myEntity
中相应的字段(例如 name
)将被更新。但是:我所期望的是,由于我没有克隆对象,因此 myStaticDataSource
中的实体也会得到更新。 但它没有!它的值仍然是原始值。为什么?Kendo的MVVM处理是否有什么我忽略的内容?
var bindingEntity = myStaticDataSource [0]
将元素分配给变量,然后将该变量绑定到视图来克隆它。它正按照您告诉它要做的方式执行。变量bindingEntity
(即myEntity
)正在更新,而不是myStaticDataSource
。 - Brettvar bindingEntity = myStaticDataSource[0]
并没有克隆该项,对kendo的.set()
的调用会作为副作用进行克隆。 - CodingWithSpike