-1

我正在构建一个自定义处理程序,该处理程序将新的 observableArray-properties 添加到 MyViewModel 的某些部分,以确保由我的处理程序绑定的元素中的嵌套模板始终具有正确的数组 -有关完整示例,请参见 jsfiddle

<div data-bind="contentAvailable: ['children','pos1']">
    <div data-bind="template: { name: 'default', foreach: children().pos1 }">
</div>

在处理程序中,我检查了当前对象bindingContext.$data是否有一个可观察对象作为名称为valueAccessor()[0](在我的示例中为“孩子”)的属性,并且该可观察对象又是否具有它自己的可观察数组,其名称为valueAccessor()[1](“pos1”) - 如果缺席,我会评估他们。

起初我尝试了 valueHasMutated() 并重置了 observable,如下所示

//within the handler
bindingContext.$data[valueAccessor()[0]]()[valueAccessor()[1]]=ko.observableArray([]);
//and after ko.applyBindings(MyViewModel) 
child1.children().pos1().push(new ViewChild(2));
child1.children().pos1.valueHasMutated();

这几乎奏效了——因为我不想每次推送一个值时都通知突变,我试图将它放在valueHasMutated()处理程序中——在添加之后,observableArray()但这会导致Uncaught TypeError: object is not a functiontypeof上面的 1 行另有说明 XD )。

我是否以根本错误的方式使用这些对象引用,或者只是对淘汰赛的魔力缺乏一些了解?:D

4

1 回答 1

0

仍然有点消化你正在尝试做的事情,但注意到你确实有一个错字,i(1)而不是在你的绑定处理程序i[1]的检查中:typeof

if(!bC.$data[i[0]]().hasOwnProperty(i[1]) || typeof bC.$data[i[0]]()[i(1)] !== 'function'){           
        var existing = bC.$data[i[0]]();
于 2013-08-15T19:39:58.177 回答