rho*_*sce 5 knockout-2.0 knockout.js
我创建了一个knockoutjs插件,最终在它的绑定处理程序的"更新"部分使用ko.renderTemplate.代码生成预期的输出,但也会抛出"无法解析绑定"错误.
关于这个问题的复制可以在http://jsfiddle.net/rhoadsce/VSWK2/上找到jsfiddle.
javascript如下:
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);
});
Run Code Online (Sandbox Code Playgroud)
html同样简单.
<div data-bind="plugin: plugin"></div>
<script id="pluginTemplate" type="text/html"><span data-bind="text: content"></span></script>
Run Code Online (Sandbox Code Playgroud)
我认为问题在于 KO 正在尝试为 div 的后代应用绑定(并且它使用根视图模型作为上下文而不是内部插件 VM 来执行此操作),但是对ko.renderTemplate自身的调用已经将绑定应用于后代(使用正确的上下文)。
为了防止这种情况发生,请让您的 bindingHandler 的 init 方法 return { controlsDescendantBindings: true }。这可以防止 KO 尝试应用绑定。这是更新的小提琴。
请参阅此处了解更多信息:http://knockoutjs.com/documentation/custom-bindings-controlling-descendant-bindings.html
| 归档时间: |
|
| 查看次数: |
1377 次 |
| 最近记录: |