2012-06-29 3 views
5

Ich erstellte ein Knockoutjs-Plugin, das schließlich ko.renderTemplate im "update" Teil des Binding-Handlers verwendet. Der Code erzeugt die erwartete Ausgabe, löst aber auch den Fehler "Unable to parse bindings" aus. Eine Reproduktion dieses Problems finden Sie hier http://jsfiddle.net/rhoadsce/VSWK2/ auf jsfiddle.knockoutjs "Kann Bindings nicht analysieren" im Plugin mit ko.renderTemplate

Das JavaScript ist wie folgt:

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

Die HTML ist genauso einfach.

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

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

+1: Code, eine Geige, offensichtlich versucht, auf eigene Faust, und ein interessantes Thema erfolgreich zu sein. Ausgezeichnete erste Frage, willkommen zu Stack Overflow – Tyrsius

Antwort

4

Ich denke, das Problem ist, dass KO versucht Nachkommen für die div Bindungen gelten (und es tut dies mit der Wurzel Viewmodel als Kontext statt des inneren Plugin VM), aber der Aufruf von ko.renderTemplate sich bereits wendet Bindungen auf die Nachkommen an (mit dem richtigen Kontext).

Um dies zu verhindern, geben Sie die init-Methode Ihres bindingHandler { controlsDescendantBindings: true } zurück. Dies verhindert, dass KO versucht, Bindungen anzuwenden. Here's the updated fiddle.

Sehen Sie hier für weitere Informationen: http://knockoutjs.com/documentation/custom-bindings-controlling-descendant-bindings.html

+0

Vielen Dank! Das hat den Trick gemacht. – rhoadsce

Verwandte Themen