这是一个非常基本的JavaScript和Aurelia问题。
让我们说我有一个单例对象,例如User
,它通常会从服务器获取更新,这会返回一个全新的User
对象。
现在,为了将更新推送到视图,我有两个选项(我知道):
手动将现有User
的每个属性更新为新User
的属性(这也需要映射每个属性)。
替换对象引用并为所有侦听器推送EventAggregator
通知,以重新查询User
对象。
我目前已经选择了1号选项,这引发了一些问题,但没有阻止。
哪一个更有效率和/或提供更多的好处而不是另一个?
答案 0 :(得分:2)
这是我的意见。您不必使用EventAggregator
,也无需更新每个属性。您可以创建帮助类(AppState
或其他东西)来保存您的User
对象。在您的元素中,注入AppState
类并创建一个getter函数以返回User
对象(使用@computedFrom
或aurelia-computed
以避免脏检查)。例如:
JS
import { AppState, MyClass } from './app-state';
import { computedFrom } from 'aurelia-framework';
export class MyElement {
static inject = [AppState];
constructor(appState) {
this.appState = appState;
}
@computedFrom('appState.obj')
get obj() {
return this.appState.obj;
}
updateObject() {
this.appState.obj = new MyClass();
}
}
HTML
<template>
<h1>Element 1</h1>
<button click.delegate="updateObject()">Update Object</button>
<br><br>
${obj.p1}
<br><br><br>
${obj.p2}
</template>