Шаблон нокаута: собственный BindingContext, те же родители

Я пишу bindingHandler и хочу создать связывающий контекст, который имеет те же родительские / родительские контексты, что и текущий bindingContext. Читайте: нет дополнительной обязательной контекстной иерархии.

Справочная информация: я пишу обработчик диалогового окна
Домен-узел имеет привязку диалога data-bind="dialog: { childTemplate: 'childTemplateId' }"
После щелчка универсальный шаблон диалога отображается и прикрепляется к телу. Вы также указываете дочерний шаблон (= это желаемое конкретное представление), который выбирается универсальным диалоговым шаблоном с помощью переменной связывания-контекста.$childTemplateName,
Дочерний шаблон не должен иметь никакого представления о том, что между ним и уровнем, содержащим обработчик диалога-привязки, есть дополнительный слой (= универсальный шаблон диалога). Так $parent, $parent.$parent, $parent.$parent.$parent,... одинаковы в дочернем шаблоне и dom-узле, имеющем data-bind="dialog: ...",

Я хочу иметь дополнительный контекст привязки, чтобы я мог расширить его свойствами, специфичными для этого "диалогового вызова", чтобы текущий контекст привязки не был загрязнен.

2 ответа

Решение

Ок, кажется
bindingContext.$parentContext.createChildContext(childViewModel);
работает идеально!
Итак, используя $parentContext это (на первый взгляд) логичный путь.

(если я правильно помню, я пробовал это ранее, но безуспешно с предыдущими версиями нокаута... но не берите в голову)

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 с той же иерархией и специфичными для диалога расширениями, который не загрязняет контекст вне вашей диалоговой привязки.

Другие вопросы по тегам