Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自定义绑定中带有ko.renderTemplate的上下文_Javascript_Knockout.js - Fatal编程技术网

Javascript 自定义绑定中带有ko.renderTemplate的上下文

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(元素)来获取

我想在knockout中使用带有自定义bindingHandler的命名模板,但似乎传递到自定义绑定中的viewModel去掉了$root、$parent、$component等上下文属性。在我的例子中,我需要这个上下文

当我在引用$parent的模板上执行ko.renderTemplate时,我会得到一个错误-“ReferenceError:$parent未定义”

注意:绑定到对象“bob”只是为了说明我需要“bob的”$parent。似乎我可以通过执行ko.contextFor(元素)来获取父视图模型的上下文,但我需要“bob”对象的上下文

JAVASCRIPT:

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