knockoutjs knockout data computed applybindings knockout.js ko-custom-binding

knockout.js - knockout - ¿Puedo vincular dinámicamente el elemento dentro del enlace personalizado?



ko applybindings (1)

¿Hay alguna manera de unir elementos desde el interior del enlace personalizado? Por ejemplo, tengo un enlace personalizado y lo ato a un conjunto de elementos observables:

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

Ahora me gustaría que myBinding enumerara todos los elementos de ''someArrayOfItems'' dentro del elemento div que seguramente le gustaría:

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

¿Es posible realizar tal operación usando un enlace personalizado? Gracias por cualquier ayuda.


Puede usar la función ko.applyBindingsToNode para agregar dinámicamente un enlace a un elemento.

En tu caso, necesitarás también llenar los contenidos con una "plantilla" apropiada.

Por ejemplo, podrías hacer algo como:

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 }; } };

Muestra aquí: http://jsfiddle.net/rniemeyer/z458E/