淘汰模板:拥有BindingContext,同样的父母

时间:2015-02-03 14:02:25

标签: javascript templates knockout.js binding-context

我正在编写一个bindingHandler,并希望创建一个绑定上下文,它具有与当前 bindingContext类似的相同的父/父上下文。阅读:没有额外的绑定 - 上下文层次结构。

背景:我写了一个对话框绑定处理程序
dom节点具有类似data-bind="dialog: { childTemplate: 'childTemplateId' }"的对话框绑定 点击后,通用对话框模板将被渲染并附加到正文。您还可以指定 子模板 (=所需的具体视图),通过 binding-context-variable {由通用对话框模板选择{1}} 即可。
子模板应该没有线索,它与包含对话框绑定处理程序的级别之间有一个额外的层(=通用对话框模板)。因此,$childTemplateName$parent$parent.$parent,...在子模板和具有$parent.$parent.$parent的dom节点中是相同的。

我希望有一个额外的绑定上下文,所以我可以使用特定于此“对话框调用”的属性来扩展它,因此当前的绑定上下文不会受到污染。

2 个答案:

答案 0 :(得分:1)

好的,好像,似乎是 bindingContext.$parentContext.createChildContext(childViewModel);
完美地工作!
因此,使用$parentContext是(实际逻辑)方式。

(如果我没记错的话,我以前曾尝试过这个以前的版本淘汰没有成功......但是没关系)

答案 1 :(得分:0)

bindingContext.extend返回一个新的bindingContext:

ko.bindingHandlers.dialog = {
    init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
        var innerBindingContext = bindingContext.extend({
            dialogProperty1: ...
        });
        ko.applyBindingsToDescendants(innerBindingContext, element);

        return { controlsDescendantBindings: true };
    }
};

所以这应该做你想要实现的:一个具有相同层次结构和特定于对话框的扩展的新bindingContext,它不会污染对话框绑定之外的上下文。