我正在编写一个bindingHandler,并希望创建一个绑定上下文,它具有与当前 bindingContext类似的相同的父/父上下文。阅读:没有额外的绑定 - 上下文层次结构。
背景:我写了一个对话框绑定处理程序
dom节点具有类似data-bind="dialog: { childTemplate: 'childTemplateId' }"
的对话框绑定
点击后,通用对话框模板将被渲染并附加到正文。您还可以指定 子模板 (=所需的具体视图),通过 binding-context-variable {由通用对话框模板选择{1}} 即可。
子模板应该没有线索,它与包含对话框绑定处理程序的级别之间有一个额外的层(=通用对话框模板)。因此,$childTemplateName
,$parent
,$parent.$parent
,...在子模板和具有$parent.$parent.$parent
的dom节点中是相同的。
我希望有一个额外的绑定上下文,所以我可以使用特定于此“对话框调用”的属性来扩展它,因此当前的绑定上下文不会受到污染。
答案 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,它不会污染对话框绑定之外的上下文。