Javascript Aurelia中的数组订阅
假设我有一个元素数组,除了在我的应用程序中显示列表外,我还想使用Javascript Aurelia中的数组订阅,javascript,aurelia,Javascript,Aurelia,假设我有一个元素数组,除了在我的应用程序中显示列表外,我还想使用HttpClient将列表同步到服务器。如何观察阵列的变化?我试过: @inject(observer定位器) 导出类视图模型{ 建造商(obsLoc){ this.list=[]; obsLoc.getObserver(此“列表”); .subscribe(li=>console.log(li)); } } 但是我没有收到错误或日志消息。getObserver返回一个属性观察器,当ViewModel类实例的列表属性更改时,该观察
HttpClient
将列表同步到服务器。如何观察阵列的变化?我试过:
@inject(observer定位器)
导出类视图模型{
建造商(obsLoc){
this.list=[];
obsLoc.getObserver(此“列表”);
.subscribe(li=>console.log(li));
}
}
但是我没有收到错误或日志消息。
getObserver
返回一个属性观察器,当ViewModel
类实例的列表
属性更改时,该观察器将通知您。只有将新值分配给列表
属性,即This.list=[1,2,3]
时,才会发生这种情况。如果没有为列表
属性指定新值,而是通过推送
、弹出
、拼接
等方式对属性值进行变异,则需要使用数组观察者。使用ObserverLocator
的getArrayObserver
方法-它包含一个参数,即您要观察的阵列:
从'aurelia binding'导入{ObserverLocator};//或者来自“aurelia框架”
@注入(观察者定位器)
导出类视图模型{
建造商(obsLoc){
this.list=[];
obsLoc.getArrayObserver(this.list);
.subscribe(拼接=>console.log(拼接));
}
}
2015年10月更新
ObserverLocator是Aurelia的内部“裸机”API。现在可以使用绑定引擎的公共API:
从“aurelia binding”导入{BindingEngine};//或者来自“aurelia框架”
@注入(绑定引擎)
导出类视图模型{
构造函数(绑定引擎){
this.list=[];//将支持任何数组、映射和集合
//订阅
让订阅=bindingEngine.collectionObserver(this.list)
.subscribe(拼接=>console.log(拼接));
//请务必稍后取消订阅****
subscription.dispose();
}
}
观察list.length是否足够?看到变化发生不是更容易吗?这里的语法有变化吗?我们从来没有添加过类似“aurelia框架”中的import{observe}这样简单的东西;观察(任何事情,回调)?这是否仍然有效(10月更新),因为我似乎无法让collectionObserver回调正常工作,但您之前的示例工作正常?应该有效-如果您想打开一个新问题,并提供有关您的问题的一些细节,我可以进行研究。啊,很抱歉发现了我的问题。我在构造函数中调用dispose(与您发布的代码相同)。哼!很抱歉