簡體   English   中英

Knockout.js:定制數據綁定'with'通過引用傳遞函數

[英]knockoutjs: custom data-bind 'with' to pass function by reference

我有一個observableArray

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

我需要通過引用所有子標記傳遞'Items'屬性,因為我必須從jquery插件開始訪問由子代附加的方法:

<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一起站立的處理程序所有正確的數據。

在這種情況下,我該怎么做才能顯示列表中的項目?

您需要將子綁定設置移至自定義綁定處理程序的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正確渲染。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM