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
是(完全合乎逻辑的)方式。
(如果我没记错的话,我之前尝试过这个,但没有成功使用以前版本的淘汰赛......但没关系)
我正在编写一个 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
是(完全合乎逻辑的)方式。
(如果我没记错的话,我之前尝试过这个,但没有成功使用以前版本的淘汰赛......但没关系)