好的,这个问题的标题提出了一个我一直在考虑的解决方案,但这是我的问题,我愿意接受建议.
我有一个类似于此的视图模型(虽然大大简化):
var viewModel = {
items: ko.observableArray([new Person('fred'), new Person('Joe')]),
name: ko.observable('hello world')
};
function Person(name)
{
this.Name = ko.observable(name);
this.Parent = ko.observable();
}
ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)
每当a Person添加到项目时,我想自动将其Parent属性设置为要添加到的项目.(在我的实际应用程序中,这是一个深层次结构,所以我不能只是对父代进行硬编码).
我正在考虑编写一个客户绑定来制作我自己的observableArray.每当添加任何内容时,自定义绑定将设置该Parent属性.我查看了http://knockoutjs.com/documentation/custom-bindings.html但这似乎只涉及正常的可观察属性.
那么我该如何做到这一点,还是有更好的方法来实现这一目标,我不知道了?
谢谢!
自定义绑定是错误的做法.绑定确定observable 如何绑定到DOM元素,例如value绑定将保持表单字段的值与observable同步,visible绑定将隐藏或显示DOM元素,具体取决于observable的值.
在将Person添加到集合时在Person上设置属性的事实是用户界面不应该知道的实现细节.我的建议是订阅observableArray并在添加Person时手动设置Parent属性.在代码中:
viewModel.items.subscribe(function(new_array) {
for (var i=0 ; i < new_array.length ; ++i) {
if (!new_array[i].Parent())
new_array[i].Parent(items);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |