讓我們先從一個常見的場景,你必須對模型的計算性能:Emberjs捉住22 - 父計算性質計算的hasMany相關對象
型號/ coney.js
bunniesTotal: Ember.computed.alias('babyBunnies.length')
比方說入口點的應用程序是顯示索引頁的所有Coneys
:
routes/coneys/index
的API返回所有Coneys
但它的分頁,所以只有50出現每頁(很棒,我們不想太多的兔子跑來跑去嗎?)
隨着每個康尼(父母的兔子)來所有的孩子(因爲只有他們的幾個,他們只是littl'uns - 即。小有效載荷!)
因此,bunniesTotal
將始終準確,您可以在coneys/index
頁面上的每個Coney
列表上看到它。偉大的,美妙的,你在Ember教程中看到的一個常見例子。 沉悶的善良。
更灰燼善良 - 用戶後訪問/coneys/new.js
,並增加了一個新的Coney
和一些BabyBunnies
,用戶將自動看到上面bunniesTotal
更新,當他們回來/coneyes/index
,由於新BabyBunny在灰燼
商店
沃倫。水下降,來吧!
現在,讓我們前往未來並將我們的
數據
warren縮放。呃哦。
現在Coneys有成千上萬的兒童,也許數以千計的孫子太(是啊,兔子,去數字!)
它沒有任何意義,現在,在coneys/index
頁面上,加載所有ALL的BabyBunnies首先擊中50個Coneys。不好。因此,我們修改API並刪除BabyBunnies
,以便每個Coney
都必須單獨請求它們(例如,例如,當您轉到coneys/edit
時)。因此,讓我們修改API並刪除BabyBunnies
,以便每個Coney
都必須單獨請求它們(例如,當您轉到coneys/edit
時)。
但是......你對計數做了什麼?現在客戶不知道每個家長可能有多少個孩子。
您可以在API中的每個父代中包含一個屬性,而不是在Ember中。所以,現在你計算服務器上的孩子,並將其發送給Ember。也許是meta.children_total
或只是模型上的一個屬性。嗯不錯。
但現在當用戶在客戶端上添加一個子項時,總數不會自動更新。你已經損失了Ember善良並且你的索引頁在用戶眼中已經「退化」了。
用戶在添加新的「子」並重定向到coneys/index
後,將看不到總更新。他們會認爲有些事情是錯的。發生了什麼新的
寶寶兔子
剛剛創建的孩子?
所以,在那個小時間旅行的文章之後,這裏是問題。
是否有一些Ember的方式來解決這個Catch-22?
也許在向其添加子項後,父級的後臺刷新。或者只是爲父母或其他一些Ember魔術請求元數據?
我看過ds-references和發生在該功能上的discussion,但都沒有幫助我看到該問題推薦的解決方案是/應該是什麼。
UPDATE
在這種DS-引用鏈接有這樣的說法:
檢索有關記錄或關係
服務器提供的元數據和這個代碼:
var meta = post.hasMany('comments').meta();
console.log(`${commentIds.length} comments out of ${meta.total}`);
因此,這意味着答案是有一個由服務器提供的BabyBunnies(兒童)元總。 meta.total
將會是所有孩子的總數。
但是,這會導致另外兩個問題:
當用戶添加了一個新的嬰兒,並將其保存到存儲/沃倫和 因此服務器,如何灰燼拿到新的總?它會做一些 背景魔術只檢索總數?我懷疑沒有,並且 ,我必須手動請求BabyBunny端點剛剛獲得 新的總和。
如果該元總實際上不是一個 '原' 總,但這:
meta.totalFemaleBabyBunnies
meta.totalMaleBabyBunnies
我怎麼沒看到灰燼可以更新此類總數而不會觸發BabyBunny終點的刷新(這意味着每次添加新寶貝時都會這樣做)
Ha你有這個問題嗎?如果是這樣,你做了什麼來解決它?