Javascript 是否将嵌套对象中的值与相应的敲除绑定匹配?
假设我在嵌套/命名空间对象中放置了一个敲除绑定列表,类似于:Javascript 是否将嵌套对象中的值与相应的敲除绑定匹配?,javascript,object,knockout.js,Javascript,Object,Knockout.js,假设我在嵌套/命名空间对象中放置了一个敲除绑定列表,类似于: var bindings = { event: { eventid: ko.observable(), office: ko.observable(), employee: { name: ko.observable(), group: ko.observable() } }, ... } 现在让
var bindings = {
event: {
eventid: ko.observable(),
office: ko.observable(),
employee: {
name: ko.observable(),
group: ko.observable()
}
},
...
}
现在让我们假设有许多不同的数据集可能被加载到此中-因此我们执行ajax查询并得到如下JSON结果:
{
"defaults": {
"event": {
"eventid": 1234,
"employee": {
"name": "John Smith"
}
},
...
}
}
请注意,并非每个绑定都有默认值,但所有默认值都映射到一个绑定。我想做的是将默认值读入它们对应的任何敲除绑定中
绝对有办法了解和解读它的价值观。在该示例中添加一个额外的参数,我可以跟踪默认值的完整键(例如event.employee.name)。我遇到的难题是使用default
的键并使用它来定位相关的敲除绑定。显然,即使我有key=“event.employee.name”
,bindings.key
也不会引用我想要的内容。我只能想到使用eval()
,这让我的味觉很差
如何使用键引用不同对象中的相同位置?也许knockout提供了一种将对象自动映射到其绑定的方法,而我只是忽略了它?任何见解都会有所帮助。提前谢谢 我建议你看一看,它能做你想做的大部分事情。如果这还不行,那么可以将
绑定
对象转换为一系列接受数据参数的构造函数。差不多
var Employee=功能(数据){
var self=这个;
self.name=ko.observbale(data.name | |“”);
self.group=ko.可观察(data.group);
};
var事件=函数(数据){
var self=这个;
self.eventid=ko.可观察(data.id | | 0);
self.office=ko.observable(data.office | |“”);
self.employee=ko.observable(新员工(data.employee));
};
变量绑定=函数(数据){
var self=这个;
self.event=ko.observable(新事件(数据));
}
我将把Nathan Fisher的解决方案放到未来的更新中,但我也想分享我现在找到的修复方案。每次defaults
对象递归时,我只是传递相应的bindings对象,而不是跟踪整个键路径
var setToDefaults = function(data){
loopDefaults(data.defaults, bindings);
};
var loopDefaults = function(defaults, targ){
for(var d in defaults){
if(defaults.hasOwnProperty(d) && defaults[d]!==null){
if(typeof(defaults[d])=="object"){
loopDefaults(defaults[d], targ[d]);
}else{
// defaults[d] is a value - set to corresponding knockout binding
targ[d](defaults[d]);
}
}
}
};
嗯,看看这个。这很聪明,我从来没有想过在可观察的物体内粘贴一个函数。但愿我能+2这个!