2

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

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

我想要一个额外的绑定上下文,这样我就可以使用特定于这个“对话调用”的属性来扩展它,这样当前的绑定上下文就不会被污染。

4

2 回答 2

1

好的,看起来
bindingContext.$parentContext.createChildContext(childViewModel);
效果很好!
所以使用$parentContext是(非常合乎逻辑的)方式。

(如果我没记错的话,我以前曾尝试过这种方法,但以前版本的淘汰赛没有成功……但没关系)

于 2015-02-03T14:42:42.217 回答
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 具有相同的层次结构和特定于对话框的扩展,不会污染对话框绑定之外的上下文。

于 2015-02-03T14:34:17.890 回答