gpt4 book ai didi

ember.js - 何时使用 getter/setter 以及何时安全地省略它们?

转载 作者:行者123 更新时间:2023-12-04 17:35:00 25 4
gpt4 key购买 nike

根据http://emberjs.com/guides/object-model/classes-and-instances/需要使用 getter 和 setter 访问属性:

When accessing the properties of an object, use the get and set accessor methods.

Make sure to use these accessor methods; otherwise, computed properties won't recalculate, observers won't fire, and templates won't update.



我知道在更改属性时需要使用 setter 来让 Ember 知道更改,以便它可以更新绑定(bind),但是读取属性呢?

来自 http://emberjs.com/guides/object-model/classes-and-instances/ 的示例
App.Person = Ember.Object.extend({
say: function(thing) {
var name = this.get('name');
alert(name + " says: " + thing);
}
});

var yehuda = App.Person.create({
name: "Yehuda Katz"
});

yehuda.say("Yes");

在上面的示例中, this.get('name')用于访问属性 name , 但是方法 say被定义为类 App.Person 的属性并通过点符号直接访问。虽然方法和属性之间存在明显的用法差异,但在 JavaScript 中,两者的实现没有区别。如果我替换 this.get('name'),该示例仍然有效通过 this.name .
  • Ember 在对象的方法和属性方面是否存在任何实现差异?
  • 直接访问方法总是安全的吗?
  • getter 是否必须始终访问所有属性,包括计算属性?如果没有,什么时候直接访问属性是安全的?

  • 我绝对想在这里坚持最佳实践,即每次都使用 getter/setter,但我想了解 Ember.js 的内部结构 :)

    最佳答案

  • Ember 中的方法或属性的定义与 Vanilla JavaScript 中的相同,但在 Ember 中它们的解析方式不同。您没有使用 POJO。每次从 Route/Controller/View 扩展时,您都在添加以不同方式处理方法和属性的 Ember 层。
  • 不,并不总是安全的。在您的情况下,这是因为它过于简单。
  • 是的,始终使用 get 访问属性.

  • 用户与您的应用程序的交互是导致对象属性发生变化的原因,我们处理这些与事件的交互。当 Ember 中的事件被触发时,它不会立即解决,而是放入优先级队列中并在稍后解决。

    如果您使用 this 直接访问属性,则以异步形式更新和读取属性无法保证您将获得最新的值(value)。

    查询: Managing Asynchrony

    When you make a change to a property in Ember, it does not immediately propagate that change. Instead, it invalidates any dependent properties immediately, but queues the actual change to happen later.



    因此,当您更改属性的值时,大致会发生以下情况:
  • 属性已更改
  • 所有依赖属性都失效
  • 将实际更改排队以备后用
  • 等待当前用户的任何其他事件处理程序完成
  • 刷新更改队列
  • 到这里为止,该属性实际上已更新(this 将照常工作)

  • 假设您使用 this读取属性,但发生其他一些改变其值的事件。在刷新队列之前,新值将不可用,但是 this立即读取属性并返回计划很快更新的属性的值。你得到过时的数据。方法 getset为您管理这种异步并始终保证新鲜的值(value)。

    当你只有一个属性时,在整个应用程序中,这种异步机制不会被注意到。

    Ember 中有许多不同的队列,而这一切背后的基 native 制是 the run loop .

    关于ember.js - 何时使用 getter/setter 以及何时安全地省略它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23681736/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com