Aurelia:可绑定 属性 已设置 "too late"

Aurelia: Bindable property gets set "too late"

在我的自定义元素中,我有一个可绑定的 属性 "menu",它是从外部设置的。我的问题是依赖于菜单的 "dish" 属性在设置菜单 属性 之前被查询(因此菜单未定义并且无法检索菜肴)。我可以在这里做什么?

菜单-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);
    }
}

菜单-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>

您应该能够将 if.bind="menu && menu.dishes" 放在 <dish-control> 的任何父组件上,甚至是 <dish-control> 本身。这样 <dish-control> 就不会附加到 DOM 并会自行初始化,直到 this.menu.dishes 存在。