Javascript 自定义绑定中带有ko.renderTemplate的上下文
我想在knockout中使用带有自定义bindingHandler的命名模板,但似乎传递到自定义绑定中的viewModel去掉了$root、$parent、$component等上下文属性。在我的例子中,我需要这个上下文 当我在引用$parent的模板上执行ko.renderTemplate时,我会得到一个错误-“ReferenceError:$parent未定义” 注意:绑定到对象“bob”只是为了说明我需要“bob的”$parent。似乎我可以通过执行ko.contextFor(元素)来获取父视图模型的上下文,但我需要“bob”对象的上下文 JAVASCRIPT:Javascript 自定义绑定中带有ko.renderTemplate的上下文,javascript,knockout.js,Javascript,Knockout.js,我想在knockout中使用带有自定义bindingHandler的命名模板,但似乎传递到自定义绑定中的viewModel去掉了$root、$parent、$component等上下文属性。在我的例子中,我需要这个上下文 当我在引用$parent的模板上执行ko.renderTemplate时,我会得到一个错误-“ReferenceError:$parent未定义” 注意:绑定到对象“bob”只是为了说明我需要“bob的”$parent。似乎我可以通过执行ko.contextFor(元素)来获取
ko.bindingHandlers.test = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var templateId = ko.unwrap(valueAccessor());
console.log(templateId);
ko.renderTemplate(templateId, viewModel, {}, element, "replaceChildren");
}
};
var viewModel = function() {
this.bob = {
name: ko.observable("bob")
};
this.numberOfClicks = ko.observable(0);
this.registerClick = function(ctx) {
console.log(ctx);
this.numberOfClicks(this.numberOfClicks() + 1);
};
};
ko.applyBindings(new viewModel());
HTML
您已单击了次
点击
绑定上下文对象位于
$parent
等所在的位置。您应该将bindingContext
传递给ko.renderTemplate
,而不是viewModel
:
ko.renderTemplate(templateId, bindingContext, {}, element, "replaceChildren");
我已使用此更改更新了您的JSFIDLE示例,并结合其他更改使其生效:
ko.renderTemplate(templateId, bindingContext, {}, element, "replaceChildren");