1

observableArrayがあります

this.Itens = ko.obeservableArray();
this.Itens.toString = function () {return 'my items array'};

jqueryプラグインから始めて、子から始めてアタッチされたメソッドにアクセスする必要があるため、すべての子タグを参照して'Items'プロパティを渡す必要があります。

<div data-bind="customWith: Items ">
    <ul data-bind="foreach:$data"> <!-- function reference of items -->
        <li data-bind="text: ko.toJSON($data)"></li>
    </ul>

    <br>
    <br>

    <!-- Only for debugging -->
    <p data-bind="text: ko.toJSON($data)"></p>
    <p data-bind="text: ko.toJSON($data()[0])"></p>
    <p data-bind="text: $data.fnTest"></p>
    <p data-bind="text: $data.fnTest()"></p>
</div>

カスタムko.bindingHandlerは次のとおりです。

ko.bindingHandlers.customWith = {

    init: function (element, valueAccessor, allBindingsAcessor, viewModel, bindingContext) {
        ko.bindingHandlers.customWith.update.apply (this, arguments);
        $(element).myplugin ();
        return {'controlsDescendantBindings': true};
    }, 
    update: function (element, valueAccessor, allBindingsAcessor, viewModel, bindingContext) {
        var fnReference valueAccessor = ();
        var childBindingContext = bindingContext.createChildContext (fnReference);
        ko.applyBindingsToDescendants (childBindingContext, element);
    }
};

完全なコードはここにあります:http://jsfiddle.net/AbraaoAlves/fz5Yj/

divタグcustomWithの内部を見るとわかるように、pはコンテンツを正しくレンダリングし、リストからアイテムを追加または削除すると更新されますが、ulタグ(foreach:$ data)はvalueAccessorをforeachで立っているハンドラーでさえレンダリングしませんすべての正しいデータ。

この場合、リスト内のアイテムをレンダリングするにはどうすればよいですか?

4

1 に答える 1

1

子バインディングの設定をカスタム バインディング ハンドラの init メソッドに移動する必要があります。ハンドラーは次のようになります。更新メソッドは必要ありません。

ko.bindingHandlers.customWith = {

    init:function(element, valueAccessor, allBindingsAcessor, viewModel, bindingContext){

        var fnReference = valueAccessor();           
        var childBindingContext = bindingContext.createChildContext(fnReference);
        ko.applyBindingsToDescendants(childBindingContext, element);

        $(element).myplugin();

        return {'controlsDescendantBindings':true};        
    },
};

これにより、LI が適切にレンダリングされます。

于 2012-05-17T19:31:12.670 に答える