项目详细信息是一个可观察数组,其中包含包含常规属性的常规对象,而不是可观察对象。您已经创建了一个“pm.itemDetail”构造函数,那么为什么不使用它呢?
pm.Item = function(name, itemDetails) {
// ...
var details = [];
for (var i = 0; i < itemDetails.length; i++) {
details.push( new pm.ItemDetail(itemDetails[i]) );
}
self.itemDetails = ko.observableArray(details);
};
我稍微更新了 pm.ItemDetail 函数:
pm.ItemDetail = function(data) {
var self = this;
self.name = ko.observable(data.name);
self.type = ko.observable(data.type);
self.subtype = ko.observable(data.subtype);
};
现在您可以使用“可见”绑定(“if”绑定隐藏 DOM 节点的内容,而不是节点本身):
data-bind="visible: type() == 1, ..."
要添加新的项目详细信息,只需创建一个“pm.ItemDetail”实例并将其推送到当前选定项目的 itemDetails 数组:
addItemDetail = function(item) {
selectedItem().itemDetails.push(new pm.ItemDetail({
name: "Please enter a name",
type: 1,
subtype: 1
}));
};
http://jsfiddle.net/XscRT/6/