Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否将嵌套对象中的值与相应的敲除绑定匹配?_Javascript_Object_Knockout.js - Fatal编程技术网

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这个!