1

У меня есть 2 пользовательских элемента управления parent-control и child-control. Мне нужен ребенок для выполнения функций от имени родителя. и требование состоит в том, чтобы ребенок использовался в пределах родительских границ.создание новой привязкиКонтекст для использования детьми модели для просмотра

пример использования

...<content-around> <!-- this is 'outerContext' bindingContext --> 
    <parent-control shared.bind="outerContext.something"> 
    <div> 
     <child-control property="nameOfMemberOfShared"></child-control> 
    </div> 
    <div> 
     <span>some text here</span> 
     <child-control property="anotherNameOfMemberOfShared"></child-control> 
    </div> 
    </parent-control> 
</content-around>... 

родитель-control.html

<template> 
    <slot></slot> 
</template> 

родитель-control.ts (предполагая, что все импорта)

export class ParentControlCustomElement { 
    @bindable shared: any; 

    bind(bindingContext, overrideContext) { 
    //here want to make sure elements rendered inside slot 
    //are able to access 'shared' 
    } 
} 

ребенка control.html

<template> 
    <!-- this is for simplicity more advanced stuff needed here --> 
    <h1>${sharedObject[property]}</h1> 
</template> 

ребенка-control.ts (предполагая, что все импорт)

export class ChildControlCustomElement { 
    @bindable property: string; 
    sharedObject: any; 

    bind(bindingContext, overrideContext) { 
    this.sharedObject = bindingContext.shared; 
    // the problem is HERE! 
    // instead of getting a binding context pointing 
    // to parent-control view model I get binding context 
    // pointing to 'outerContext' 
    } 
} 

Как я могу убедиться, что с внутренних компонентов parent-control получат контекст привязки, указывающий на модель представления parent-control?

ответ

3

Если вы знаете, что ваш контроль ребенок всегда будет использоваться внутри родительского контроля вы можете объявить зависимость от предка/родителя:

@inject(ParentControlCustomElement) 
export class ChildControlCustomElement { 
    constructor(parentControl) { 
    this.parentControl = parentControl; 
    } 
} 

Если вы не знаете наверняка, является ли дочерний элемент управления будет в качестве родителя, используйте @inject(Optional.of(ParentControlCustomElement)).

+0

Интересно, позвольте мне попробовать –

+0

Отлично! это работает так, как ожидалось! Большое спасибо. –