javascript - 将嵌套对象中的值与相应的 knockout 绑定(bind)相匹配?

标签 javascript object knockout.js

假设我有一个放置在嵌套/命名空间对象中的 knockout 绑定(bind)列表,类似于:

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"
            }
        },
        ...
    }
}

请注意,并非每个绑定(bind)都有默认值 - 但所有默认值都会映射到绑定(bind)。我想要做的是将默认值读取到它们对应的任何 knockout 绑定(bind)中。

肯定有办法traverse a nested object并读取其值。向该示例添加额外的参数,我可以跟踪默认的完整 key (例如 event.employee.name)。我遇到困难的地方是采用default的 key 并使用它来定位关联的 knockout 绑定(bind)。显然,即使我有 key = "event.employee.name"bindings.key 也没有引用我想要的内容。我只能想到使用eval(),这让我感觉很糟糕。

如何使用键来引用不同对象中的相同位置?也许 knockout 提供了一种将对象自动映射到其绑定(bind)的方法,而我只是忽略了它?任何见解都会有所帮助。提前致谢!

最佳答案

我建议您看看 Knockout Mapping Plugin这将完成您想做的大部分事情。如果这不起作用,那么您可以将您的绑定(bind)对象转换为一系列接受数据参数的构造函数。类似于

var Employee = function (data){
	var self = this;
  	self.name = ko.observbale(data.name || '');
  	self.group = ko.observable(data.group);
};

var Event = function(data){
	var self = this;
  	self.eventid = ko.observable(data.id || 0);
  	self.office = ko.observable(data.office || '');
  	self.employee = ko.observable(new Employee(data.employee));
};


var bindings = function(data){
    var self = this;
  	self.event = ko.observable(new Event(data));
}

关于javascript - 将嵌套对象中的值与相应的 knockout 绑定(bind)相匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920931/

相关文章:

javascript - PHP 警报框 - localhost 的页面说

javascript - 转换对象结构数组

python - 如何将字符串和变量赋值给一个变量

javascript - 'window'对象如何成为前端JS脚本的全局对象?

javascript - .each() 和 eval() 的问题

javascript - 使用适用于 Tizen 的 Facebook API 上传视频?

javascript - Ladda spin 动画在 stop() 后保持旋转一秒

javascript - 如何动态更新 dropkick.js 下拉菜单中的选项?

javascript - knockout 映射——将多个数据源整合到一个 View 模型中

javascript - 是否有js插件将矩阵参数转换为css3转换属性?