gpt4 book ai didi

javascript - Ember.Object 中的多个属性或单个观察者

转载 作者:行者123 更新时间:2023-11-30 17:12:46 24 4
gpt4 key购买 nike

如果我有一系列依赖于同一属性的属性,定义它们的最佳(可维护、最快等)方式是什么?我能想到一些:

一个。每个属性:

isDraft: (->
@get('status') is App.Status.DRAFT
).property('status')

isPublished: (->
@get('status') is App.Status.PUBLISHED
).property('status')

isArchived: (->
@get('status') is App.Status.ARCHIVED
).property('status')

B.一次性设置 Prop 的观察者:

isDraft: true
isPublished: false
isArchived: false

statusDidChange: (->
@setProperties(
isDraft: @get('status') is App.Status.DRAFT
isPublished: @get('status') is App.Status.PUBLISHED
isArchived: @get('status') is App.Status.ARCHIVED
)
).observes('status')

C.直接计算 Prop :

isDraft:     Ember.computed.equal('status', App.Status.DRAFT)
isPublished: Ember.computed.equal('status', App.Status.PUBLISHED)
isArchived: Ember.computed.equal('status', App.Status.ARCHIVED)

(C) 绝对看起来是最优雅的,但我想知道:与一个观察者相比,使用三个计算属性是否有任何惩罚? (C) 基本上是 A 的简写吗?有什么区别吗?

最佳答案

C 是 A 的简写(虽然是一个小的重定向)。虽然 B 现在可能会给你与 A 和 C 相同的答案,但并不总是能保证做到这一点。我会不惜一切代价避免使用 B,因为很难判断值的来源。如果您的团队对速记感到满意,请使用 C,使用 A 更明确。

但最重要的是,不要担心速度,担心可读性。像这样的事情可能是您应该检查性能的最后一件事。

此外,我不确定这个问题是否符合 SO 规则,但我想我还是会回答。

编辑:关于 B 不能保证提供相同的功能,有两个部分。

  1. 观察者现在是同步的,但未必总是如此。至少你应该使用 observesImmediately()
  2. 观察者始终处于事件状态,即使未使用属性也是如此。如果您改用计算属性,Ember 会智能决定何时以及何时不更新它们。

关于javascript - Ember.Object 中的多个属性或单个观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26661238/

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