Рассмотрим следующий пример и обратите внимание на функцию setActive
в app-bar.js
.Шаблон против класса в Aurelia
Теперь, как он стоит, если я нажму Home
или Plan
из app-bar.html
, то activeTab
свойства в app.js
обновляется соответствующим образом. Однако, если я нажму на среднюю кнопку, которая вызывает вышеупомянутую функцию, я получаю следующую ошибку: Uncaught ReferenceError: activeTab is not defined
. Более того, если я изменю установщик на 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>
У меня нет места, чтобы проверить это, но это работает, если вы измените его 'this.activeTab = newTab;'? – tcigrand
@tcigrand Это не так, я упомянул об этом в последнем предложении второго абзаца. Так что в тупике! – lux
Хорошо. Похоже, что у вас есть некоторые проблемы с объемом каждого компонента. AppBar не может видеть приложение. Вы должны передать значение activeTab приложения в AppBar. Вы должны иметь возможность следовать разделу «Пользовательские элементы» на странице http://aurelia.io/docs.html#/aurelia/framework/1.0.0-beta.1.0.7/doc/article/cheat-sheet – tcigrand