Tengo una pregunta rápida sobre CustomBindings, espero que algunos me ayuden a explicarme? Pensé que cuando se actualiza un observable, cualquier unión personalizada que esté vinculada a ese observable tendría su método de "actualización" llamado. Puedo ver que cuando actualizo mi observable que otros suscriptores están siendo notificados, no parece que se llame al CustomBinding.Knockout + customBinding no está actualizando
Aquí es mi modelo de vista:
var innerModel = {
name: ko.observable('junk')
};
var innerModel2 = {
name: ko.observable('junk2')
};
var viewModel = {
im1: innerModel,
im2: innerModel2,
selectedModel: ko.observable({name:'xxx'})
};
y aquí está mi customBinding:
ko.bindingHandlers.custom = {
update: function(element, valueAccessor) {
console.log("BAM!");
while (element.firstChild)
ko.removeNode(element.firstChild);
ko.renderTemplate('test', valueAccessor(), {}, element, 'replaceNode');
}
};
donde mi plantilla es simplemente un lapso que muestra el campo "Nombre":
<script id='test' type='text/html' charset='utf-8'>
<span data-bind='text: name'></span>
</script>
Aquí está el código HTML que uso con el enlace personalizado:
<div id="container" data-bind="with: viewModel">
<div data-bind="custom: selectedModel">
</div>
</div>
Cuando actualizo selectedModel a cualquiera de los dos innerModels, se muestra el nombre correcto, pero no se está llamando a la función de 'actualización' del CustomBinding. Tengo un suscriptor independiente a la "selectedModel" observables:
viewModel.selectedModel.subscribe(function(newValue) {
console.log(newValue.name());
});
y que se llama cuando se cambia el selectedModel, ¿por qué no es actualización del customBinding siendo llamado?
Aquí es una jsFiddle que muestra el problema: http://jsfiddle.net/gperng/twAcJ/
se agradecería cualquier ayuda!
no estoy 100% eso tiene sentido. Si elimino el div con el enlace "con", sigo teniendo el mismo problema que antes (donde el manejador de actualización del enlace personalizado no se está llamando a pesar de que se ha cambiado el observable). Además, en su ejemplo, el "init" del enlace personalizado se está llamando cada vez (porque el padre con es el observable y ha cambiado, por lo que todos los elementos secundarios a continuación se vuelven a representar). Consulte http://jsfiddle.net/gperng/6nw8B/, agregué una función "init" y puede ver que el enlace se vuelve a inicializar cada vez. –