我有一个复杂的 javascript 变量,其中有许多嵌套变量,每个变量都可以包含自己的嵌套变量......当我进行淘汰赛映射时,有时嵌套变量被设置为对象,而有时这些完全相同的变量是函数。因此,当我的数据绑定到这些嵌套变量时,下次当变量现在是一个函数时,该绑定不会更新。
下面的小提琴给出了我所看到的想法:
http://jsfiddle.net/Eves/AUcGM/2/
html:
<p> <span>Name:</span>
<span data-bind="text: TempData().objectA.Name"></span>
<button id="update" data-bind="click: Update">Update!</button>
</p>
Javascript:
var ViewModel = function (data) {
var me = this;
me.TempData = ko.observable(data);
me.Update = function () {
ko.mapping.fromJS(temp2, {}, me);
};
return me;
};
var temp1 = {
objectA: {
Name: 'temp1.objectA.Name'
}
};
var temp2 = {
objectA: function () {
this.Name = 'temp2.objectA.Name';
return this;
}
};
window.viewModel = ko.mapping.fromJS(new ViewModel(temp1));
ko.applyBindings(window.viewModel);
最初,跨度文本显示“temp1.objectA.Name”。但是,如果单击更新按钮并且绑定从 temp1 对象切换到 temp2 对象,因为“objectA”现在是一个函数,数据绑定永远不会更新。如果我要将跨度的数据绑定更改为“TempData().objectA().Name”,那么 temp2 将可以正常工作......但随后会破坏 temp1。
所以问题是:
有没有办法始终将变量评估为对象或函数?
我怀疑我可以使用 ko.computed 来始终获得适当的值,而不管函数或对象如何。但考虑到我真正处理的对象的复杂性,这会变得非常混乱。