我在使用分层视图模型的淘汰赛 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 而不是更新它。