Gae*_*aet 2 web-component typescript aurelia
我有一个 Aurelia 组件,它只是应该显示项目列表。组件的模型有一个可绑定的“items”属性:
@bindable items = [];
Run Code Online (Sandbox Code Playgroud)
组件模板使用简单的重复属性显示列表:
<div repeat.for="item of items">
${item.id} </div>
Run Code Online (Sandbox Code Playgroud)
当我从使用该组件的页面视图模型中将新项目推送到绑定数组中时,我可以看到在刷新列表并出现新项目时添加了该项目。我的问题是,当修改“items”数组时,我需要执行其他操作,因此我尝试将 collectionObserver 添加到组件中,如下所示:
import {BindingEngine, inject} from 'aurelia-framework';
@inject(BindingEngine)
export class GridControl {
@bindable items = [];
constructor(bindingEngine) {
this.items = [];
let subscription = bindingEngine.collectionObserver(this.items)
.subscribe(this.listChanged);
}
listChanged(splices) {
// do some stuff
}
}
Run Code Online (Sandbox Code Playgroud)
但是我的“listChanged”处理程序永远不会被调用。知道为什么吗?
在构造函数中,bindingEngine.collectionObserver(this.items)被调用。
稍后,当组件进行数据绑定时,this.items会通过数据绑定分配一个不同的数组实例。这个不同的数组实例不是你传递给绑定引擎进行观察的那个。
尝试做这样的事情:
import {BindingEngine, inject} from 'aurelia-framework';
@inject(BindingEngine)
export class GridControl {
@bindable items;
constructor(bindingEngine) {
this.bindingEngine = bindingEngine;
}
listChanged(splices) {
// do some stuff
}
subscribeItems() {
if (this.items) {
this.subscription = this.bindingEngine.collectionObserver(this.items)
.subscribe(splices => this.listChanged(splices));
}
}
unsubscribeItems() {
if (this.subscription) {
this.subscription.dispose();
this.subscription = null;
}
}
itemsChanged() {
this.unsubscribeItems();
this.subscribeItems();
}
unbind() {
this.unsubscribeItems();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |