我可以动态绑定内自定义绑定元素?(Can I dynamically bind element in

2019-08-02 01:50发布

有没有从定制绑定绑定内元素的方法吗? 例如,我有自定义绑定,并将绑定到其项目的可观测阵:

var someArrayOfItems = ko.observableArray(['item1', 'item2', 'item3']);
...
<div data-bind="myBinding: someArrayOfItems"></div>

现在我想myBinding列出所有从它一定会喜欢的div元素里面“someArrayOfItems”的元素:

<ul data-bind="foreach: someArrayOfItems">
    <li>
        <span data-bind="text: $data"></span>
    </li>
</ul>

是否可以使用自定义的结合,使这样的操作? 谢谢你的帮助。

Answer 1:

您可以使用该功能ko.applyBindingsToNode动态添加元素的binding。

在你的情况,你还需要有一个合适的“模板”填充内容。

例如,你可以这样做:

ko.bindingHandlers.myBinding = {
    init: function(element, valueAccessor) {
        var ul = document.createElement("ul"),
            data = valueAccessor();

        //append a new ul to our element
        element.appendChild(ul);

        //could use jQuery or DOM APIs to build the "template"
        ul.innerHTML = "<li><span data-bind='text: $data'></span></li>";

        //apply foreach binding to the newly created ul with the data that we passed to the binding
        ko.applyBindingsToNode(ul, { foreach: data });;

        //tell Knockout that we have already handled binding the children of this element
        return { controlsDescendantBindings: true };
    }        
};

样品在这里: http://jsfiddle.net/rniemeyer/z458E/



文章来源: Can I dynamically bind element inside custom binding?