Knockout Template:自己的BindingContext,相同的Parents

Knockout Template: Own BindingContext, same Parents

我正在编写一个 bindingHandler 并希望创建一个绑定上下文,它具有 current 相同的 parents/parent-contexts ] 绑定上下文。阅读:没有额外的绑定上下文层次结构。

背景:我写了一个dialog-binding-handler
dom-node 有一个像 data-bind="dialog: { childTemplate: 'childTemplateId' }"
这样的对话绑定 单击后,通用对话框模板 将呈现并附加到正文。您还指定了一个 child-template(= 是所需的具体视图),它由 [=24] 的通用对话框模板选择=]绑定上下文变量$childTemplateName.
子模板应该不知道,在它和包含对话框绑定处理程序的级别之间有一个额外的层(= 通用对话框模板)。因此 $parent$parent.$parent$parent.$parent.$parent、...在子模板和具有 data-bind="dialog: ..." 的 dom 节点中是相同的。

我想要一个额外的绑定上下文,这样我就可以使用此 "dialog-call" 的特定属性来扩展它,这样当前的绑定上下文就不会被污染。

bindingContext.extend returns 一个新的 bindingContext:

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

        return { controlsDescendantBindings: true };
    }
};

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

好的,看来是
bindingContext.$parentContext.createChildContext(childViewModel);
完美运行!
所以使用 $parentContext 是(完全合乎逻辑的)方式。

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