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

A.每个属性:

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.一次设置道具的观察者:

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.整理计算道具:

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不能保证提供相同的功能,有2部分。


观察者现在是同步的,但不一定总是同步的。至少应使用observesImmediately()
观察者始终处于活动状态,即使未使用属性也是如此。如果改用计算属性,则Ember会明智地决定何时以及何时不更新它们。

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

10-12 12:34
查看更多