单个对象最有效的Aurelia绑定方式

时间:2016-10-26 13:30:33

标签: javascript data-binding binding aurelia aurelia-binding

这是一个非常基本的JavaScript和Aurelia问题。

让我们说我有一个单例对象,例如User,它通常会从服务器获取更新,这会返回一个全新的User对象。

现在,为了将更新推送到视图,我有两个选项(我知道):

  1. 手动将现有User的每个属性更新为新User的属性(这也需要映射每个属性)。

  2. 替换对象引用并为所有侦听器推送EventAggregator通知,以重新查询User对象。

  3. 我目前已经选择了1号选项,这引发了一些问题,但没有阻止。

    哪一个更有效率和/或提供更多的好处而不是另一个?

1 个答案:

答案 0 :(得分:2)

这是我的意见。您不必使用EventAggregator,也无需更新每个属性。您可以创建帮助类(AppState或其他东西)来保存您的User对象。在您的元素中,注入AppState类并创建一个getter函数以返回User对象(使用@computedFromaurelia-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>

正在运行示例https://gist.run/?id=f2ed9769343513b0819115863ff64c34