我是一名經驗豐富的Ember.js開發人員。在指南中,我們可以找到具有全名的計算屬性的例子(同步,簡單,依靠名字和姓氏)。在野外,我們可以發現計算屬性以異步方式的大量用法(例如,在承諾解決後自行設置 - 第一次運行並得到返回undefined
)。Ember Computed屬性意味着用於/包含異步代碼?
我越看到這個異步計算屬性我越想知道 - 計算屬性是否意味着與異步代碼一起使用?難道不是在惹麻煩嗎?
一個常見問題是其他計算屬性(CP2)依賴於異步CP1。 CP2獲得CP1,但獲得undefined
(因爲CP1將在稍後時間設置其值,因爲它是異步的)。 CP2使用錯誤的CP2值完成計算(undefined
)。 CP1自行設置,但是CP2不再重新計算(即使CP1已更改),因爲CP2未在模板中引用(這意味着它將被綁定並始終需要其值,並且始終會在CP1更改時重新計算) - 而是由一些JavaScript調用引用。
真實世界的例子可能是根據訂單中的物品計算總訂單(來自電子商務店)的價格。計算屬性依賴於項目的異步關係,這些項目可能包含其他異步關係,如稅類型。
我沒有使用'items。@。price'這種格式,這個有效嗎? 'items。@ each.price'這是否有區別? – kumkanillam
哦,這是一個錯字,它應該是@each :),你是對的 – kasperite
我不同意你的解決方案,而我發現其餘的答案很有價值。將等待更多的想法。 :) –