我正在尝试构建一个运算符类似于此的视图:
用户选择父母,然后所有孩子都显示在下方,然后他们可以在那里编辑孩子的信息。
我想知道的是,当用户在父网格上选择新的父级时,有什么方法可以动态更改子网格的绑定。
我的ko js形式的视图模型现在看起来像这样:
function ViewModel(viewModelFromServer) {
var self = this;
self.parents = ko.observableArray(convertToKOParents(viewModelFromServer.Parents));
self.activeChildren = ko.observableArray([]);
self.changeParent(newParent){
self.activeChildren = newParent.children;
}
}
function Parent(serverParent) {
var self = this;
self.name = ko.observable(serverParent.Name);
self.children = ko.observableArray(convertToKOChildren(serverParent.Children);
self.childCount = ko.computed(function() {
return self.children.length;
});
}
function Child(serverChild) {
var self = this;
self.name = ko.observable(serverChild.Name);
self.Age = ko.observable(serverChild.Age);
self.Height = ko.observable(serverChild.Height);
}
现在,当用户点击父行时,我想将activeChildren切换到新的父级,但是绑定不会自动应用。
这种观点模型是否正确?我应该以不同的方式进行操作吗?如果是这样的话,那个视图模型会是什么样的?当父进行更改时,如何让子网格正确绑定?
答案 0 :(得分:1)
您可以使用activeParent并绑定到它的子项:
,而不是使用activeChildren<div data-bind="with: activeParent">
<table>
<tbody data-bind="foreach: children">
</tbody>
</table>
</div>
由于activeParent将是一个可观察的,你只需调用它,你就不需要changeParent函数:
self.activeParent = ko.observable();
改变:
viewModelVariable.activeParent(newParent);
另外我认为你的childCount计算需要通过调用children()
来访问底层数组:
self.childCount = ko.computed(function() {
return self.children().length;
});
答案 1 :(得分:0)
我会将当前子项设为一个计算值,该值返回所选父项的children属性。像这样:
function ViewModel(viewModelFromServer) {
var self = this;
self.parents = ko.observableArray(convertToKOParents(viewModelFromServer.Parents));
self.activeChildren = ko.computed(function() {
return self.activeParent.children
});
self.activeParent = ko.observable()
self.changeParent(newParent){
self.activeParent(newParent)
}
}
如果你设置一个没有像convertToKOParents那样的环境功能的jsfiddle,我可以更清楚地证明它。