假设我有一个放置在嵌套/命名空间对象中的 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/