我有一個分層視圖模型更新子屬性
我的視圖模型在一定程度上構成這樣與淘汰賽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
爲什麼你需要克隆對象。只需將彈出窗口綁定到同一個對象。或者,如果您希望能夠取消更新,請保留對原始對象的引用,然後將克隆對象的值更新爲原始對象。 –