Аурелия: свойство Bindable устанавливается слишком поздно

В моем пользовательском элементе у меня есть привязываемое свойство «меню», которое устанавливается снаружи. Моя проблема заключается в том, что свойства «блюда», которые зависят от меню, запрашиваются до того, как свойство меню установлено (поэтому меню не определено, и блюда не могут быть получены). Что я могу здесь сделать?

menu-control.ts:

import { bindable } from 'aurelia-framework';

import { Menu } from '../../../app/model/menu';
import { Dish } from '../../../app/model/dish';

export class MenuControl {

    @bindable menu: Menu;

    get dish1() {
        return this.getDish(1);
    }

    get dish2() {
        return this.getDish(2);
    }

    get dish3() {
        return this.getDish(3);
    }

    getDish(dishNo: number) {
        return this.menu.dishes.find(x => x.dishNo == dishNo);
    }
}

menu-control.html:

<require from="../dish-control/dish-control"></require>

<div class="tab-content" style="margin-top: 20px; width: 800px;">
    <div class="tab-pane fade in active">
        <div class="row">
            <div class="col-md-8">
            </div>
            <div class="col-md-2" style="padding-left: 0;">
            </div>
            <div class="col-md-2" style="padding-left: 0;">
                <label>Vegetarisch</label>
            </div>
        </div>
        <h4>Men&uuml; 1</h4><dish-control dish.bind="dish1"></dish-control>
        <h4>Men&uuml; 2</h4><dish-control dish.bind="dish2"></dish-control>
        <h4>Men&uuml; 3</h4><dish-control dish.bind="dish3"></dish-control>
    </div>
</div>


person IngoB    schedule 09.11.2017    source источник


Ответы (1)


Вы должны иметь возможность поместить if.bind="menu && menu.dishes" в любой из родительских компонентов для <dish-control> или даже самого <dish-control>. Таким образом, <dish-control> не будет присоединен к DOM и не инициализируется до тех пор, пока не будет существовать this.menu.dishes.

person CBrown77    schedule 10.11.2017