2012-06-29 6 views
5

Creé un complemento knockoutjs que finalmente utiliza ko.renderTemplate en la parte de "actualización" de su controlador de enlace. El código produce el resultado esperado pero también arroja un error "No se puede analizar enlaces".knockoutjs "No se pueden analizar enlaces" en el complemento utilizando ko.renderTemplate

Puede encontrar una reproducción de este problema aquí http://jsfiddle.net/rhoadsce/VSWK2/ en jsfiddle.

El javascript es el siguiente:

ko.plugin = function(configuration) { 
    var self = this; 
    self.content = configuration.content || ''; 
}; 

ko.bindingHandlers.plugin = { 
    update: function(element, valueAccessor, allBindingsAccessor) { 
     var viewModel = valueAccessor(); 

     $(element).append('<div id="pluginContainer"></div>'); 
     var $container = $(element).children('#pluginContainer'); 

     ko.renderTemplate("pluginTemplate", viewModel, {}, $container, 'replaceNode'); 
    } 
}; 

$(function() { 
    var vm = (function() { 
     var plugin = new ko.plugin({ content: 'test content'}); 

     return { 
      plugin: plugin 
     } 
    })(); 

    ko.applyBindings(vm); 
}); 

El html es igual de simple.

<div data-bind="plugin: plugin"></div> 

<script id="pluginTemplate" type="text/html"><span data-bind="text: content"></span></script> 
+3

1: código, un violín, los intentos obvios para tener éxito en su propia, y una cuestión interesante. Excelente primera pregunta, bienvenido a Stack Overflow – Tyrsius

Respuesta

4

Creo que el problema es que KO está tratando de aplicar fijaciones para los descendientes de la div (y lo hace con el modelo de vista de la raíz como contexto, en lugar de que el plugin interno VM), pero la llamada a ko.renderTemplate sí ya aplica enlaces a los descendientes (con el contexto correcto).

Para evitar esto, haga que su método init de bindingHandler devuelva { controlsDescendantBindings: true }. Esto evita que KO intente aplicar enlaces. Here's the updated fiddle.

ver aquí para información adicional: http://knockoutjs.com/documentation/custom-bindings-controlling-descendant-bindings.html

+0

¡Gracias! Eso hizo el truco. – rhoadsce

Cuestiones relacionadas