我有一个分层视图模型更新子属性
我的视图模型在一定程度上构成这样与淘汰赛js和映射插件的问题:
VM = {
members:[
{
name:"name 1",
volunteering:[{...},{...},{...}]
},
{
name:"name 1",
volunteering:[{...},{...},{...}]
}
]
}
每个成员在一个标签中,每个标签都有一个志愿活动网格。点击网格中的项目,弹出一个对话框来编辑志愿活动。 此时我克隆对象,以促进“取消编辑”功能
var Volunteer = {};
var koContext=ko.contextFor(this);
Volunteer = ko.mapping.toJS(koContext.$data); //plain js volunteer
Volunteer.index=koContext.$parent.EventVolunteers().indexOf(koContext.$data); //index of volunteer in member volunteer array
ko.applyBindings(ko.mapping.fromJS(Volunteer),$("#dialog-EditVolunteer")[0]); //bind new volunteer obj to dialog
到目前为止似乎确定,单击保存对话框上导致该问题。
var volunteer = ko.mapping.toJS(ko.contextFor(this).$data);
ko.mapping.fromJS(volunteer,{},ko.contextFor(currentTab).$data.EventVolunteers()[volunteer.index]);
此时的属性得到的视图模型更新,但不是在主屏幕上的网格。
看起来ko.mapping.fromJS取代了observable而不是更新它。
希望避免这是有问题的对象图大,比这更复杂,这只是其中的一个部分,因此使用ko.mapping的首先插件。 – stevenrcfox
同样在这个模型中,你如何支持取消更新(本质上是我的问题的来源) – stevenrcfox
为什么你需要克隆对象。只需将弹出窗口绑定到同一个对象。或者,如果您希望能够取消更新,请保留对原始对象的引用,然后将克隆对象的值更新为原始对象。 –