我有一个具有嵌套属性的复杂对象,这些属性从 null 切换为实际填充的对象。我可以通过 ko.mapping.fromJSON 第一次很好地映射所有内容。但是,当一个事件导致发生后续映射时,属性变为 null 并且其他属性获取值时,映射会变得疯狂:
当“更新!” 单击按钮会触发警报('1')并显示“Test2”。但是,单击“更新!” 再次并 alert('2') 触发,但文本不会改变。有任何想法吗?
html:
<p> <span>Name:</span>
<span data-bind="text: IntroData ? IntroData.Name : TempData.Name"></span>
<button id="update" data-bind="click: Update">Update!</button>
</p>
javascript:
var ViewModel = function (data) {
var me = this;
ko.mapping.fromJS(data, {}, me);
me.Update = function () {
if (me.Index() == '0' || me.Index() == '2') {
alert('1');
ko.mapping.fromJS(stuff2, {}, me);
} else {
alert('2');
ko.mapping.fromJS(stuff3, {}, me);
}
};
return me;
};
var stuff = {
Index: '0',
IntroData: {
Name: 'Test'
},
TempData: null
};
var stuff2 = {
Index: '1',
IntroData: {
Name: 'Test2'
},
TempData: {
Name: 'Temp2'
}
};
var stuff3 = {
Index: '2',
IntroData: null,
TempData: {
Name: 'Temp3'
}
};
window.viewModel = ko.mapping.fromJS(new ViewModel(stuff));
ko.applyBindings(window.viewModel);