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