2014-10-30 72 views
1

如果我有一系列依賴於相同屬性的屬性,那麼定義它們的最佳方式(可維護,最快等)是什麼?我能想到的幾個:Ember中的多個屬性或單個觀察者。對象

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的簡寫?有什麼區別?

+1

如果您發現任何性能問題,我會與C一起移動到B,但我並不擔心它太多。 – Asgaroth 2014-10-30 19:37:01

回答

2

C是A的簡寫(儘管是一個小的重定向)。雖然B現在可以給你與A和C相同的答案,但並不總是保證這樣做。我會不惜一切代價避免B,因爲很難分辨價值來自哪裏。如果你的團隊熟悉簡寫,請使用C,使用A更加明確。

但最重要的是,不是擔心速度,擔心可讀性。像這樣的東西可能是你應該檢查性能的最後一件事。

此外,我不確定這個問題是否可以接受SO規則,但我認爲我會回答。

編輯:關於B不能保證提供相同的功能,有2部分。

  1. 觀察者現在是同步的,但可能並不總是如此。最小你應該使用observesImmediately()
  2. 觀察員是總是活動,即使屬性沒有使用。如果您使用計算屬性,Ember會對何時和何時不更新它們做出明智的決定。
+0

夢幻般的答案,謝謝! – typeoneerror 2014-10-30 20:50:34

相關問題