请考虑以下示例,请注意setActive
中的app-bar.js
功能。
现在,如果我点击Home
中的Plan
或app-bar.html
,activeTab
中的app.js
属性会相应更新。但是,如果我单击调用上述功能的中间按钮,则会收到以下错误:Uncaught ReferenceError: activeTab is not defined
。此外,如果我将setter更改为this.activeTab = newTab
,则不会抛出任何错误,但该值未绑定回activeTab
app.js
这里发生了什么?为什么DOM模板是我能够查看/与activeTab
交互的组件中唯一的一部分?我在班上缺少必要的语法吗?如果是,请提供文件。
我正在我的桌子上敲我的头一会儿,一时兴起,我决定将activeTab = 'Home'
放在click.trigger
本身,它神奇地起作用,但我不明白为什么。我不喜欢在模板中更新模型值的想法,所以我想将事件传递给JS并更新模型,但正如我们所看到的,它不起作用。
如果您需要任何其他信息,请与我们联系。
app.js
export class App {
activeTab = 'Home';
}
app.html
<template>
<require from="app-bar"></require>
<h4>ActiveTab via App.js: ${activeTab}</h4>
<app-bar></app-bar>
</template>
应用-bar.js
export class AppBar {
setActiveTab(newTab) {
activeTab = newTab;
}
}
应用-一个bar.html
<template>
<button click.trigger="activeTab = 'Home'">Home</button>
<button click.trigger="setActiveTab('Assess')">Assess</button>
<button click.trigger="activeTab = 'Plan'">Plan</button>
</template>
答案 0 :(得分:2)
问题在于:
export class AppBar {
setActiveTab(newTab) {
activeTab = newTab; // <---- what is `activeTab`? It's not defined anywhere!
}
}
你可能想做这样的事情:
应用-bar.js 强>
import {bindable, bindingMode} from 'aurelia-framework';
export class AppBar {
@bindable({ defaultBindingMode: bindingMode.twoWay }) activeTab;
setActiveTab(newTab) {
this.activeTab = newTab;
}
}
<强> app.html 强>
<template>
<require from="app-bar"></require>
<h4>ActiveTab via App.js: ${activeTab}</h4>
<app-bar active-tab.bind="activeTab"></app-bar>
</template>