2012-05-23 141 views
4

我有以下情況,我認爲處理它的最好方法是使用Backbone relation
如果有其他解決方案,請糾正我。骨幹關係:如何把關係集合和模型?

我有一個集合(1)和一個模型(2)。
收集結果如(3)和模型結果(4)一樣。

最後,視圖應該看起來像這樣(5)。

我的問題是:
1)可能使用Backbone relation來處理這種情況?
2)如果是,我應該如何重寫FeedsCollection自動從UserModel獲取所需的數據?


(1)

// FeedsCollection 
var FeedsCollection = Backbone.Collection.extend({ 
    url: "http://localhost/feeds" 
}); 

(2)

// User Model 
var UserModel = Backbone.Model.extend({ 
    url: "http://localhost/user" 
}); 

(3)feedsCollection結果

//feedsCollection.toJSON(); 

[ 
    {id:1, message: "something one", creator_id: 100}, 
    {id:2, message: "something two", creator_id: 101}, 
] 

(4)的usermodel導致

userModel = new UserModel({id: 100}); 
userModel.fetch(); 
userModel.toJSON(); // {id:100, name: "jhon"} 

userModel = new UserModel({id: 101}); 
userModel.fetch(); 
userModel.toJSON(); // {id:101, name: "herry"} 

(5)最後認爲結果應該是這樣的:

[ 
    {message: "something one", creator_id: 100, name: "jhon"}, 
    {message: "something two", creator_id: 101, name: "herry"}, 
] 
+0

(2)意味着var UserModel = Backbone.Model.extend({}),而不是FeedsCollection?我很困惑FeedsCollection如何與UserModel相關?它們是基於屬性creator_id關聯的嗎? – TYRONEMICHAEL

+0

@TyroneMichael,感謝您的評論,我確實更正了(2),是的,他們通過'creator_id'關聯。 'feedsCollection.creator_id = userModel.id' – js999

+0

這是一對多|多對一的關係還是多對多的關係? (例如,用戶是否可以擁有多個供稿並且供稿有多個用戶?) – jmk2142

回答

0

你有沒有考慮直接從服務器返回的用戶名。 這樣的URL「/供稿」,將返回:

[ 
    {message: "something one", creator_id: 100, name: "jhon"}, 
    {message: "something two", creator_id: 101, name: "herry"}, 
] 

如果你只是想用戶的姓名,以顯示消息附近這似乎是一個簡單的解決方案。我不知道你的服務器的後端是什麼,但我相信這可以有效地完成。

所以回答你的問題:

1)可以使用骨幹關係來處理這種情況?

也許你可以使用插件來解決這種情況,但我不會推薦引入一個插件來解決這個特定的例子。對我來說,查詢用戶模型的服務器似乎效率低下,只是爲了顯示他們的名字。但是,在不同的情況下,這可能是合適的

無論如何,如果你決定加載用戶模型插件或沒有它。你必須問一些問題,以確定它是否值得:

  1. 這會產生多少個查詢?每個用戶一個可能太多。
  2. 如果您用一個請求加載全部數據,服務器將返回多少個用戶模型?所有的用戶可能會很多。所以你只需要加載需要的。
  3. 服務器返回多少數據?你真的需要所有用戶的屬性嗎?

所以總而言之,我仍然認爲你直接從服務器返回用戶的名字,並且只在你需要比名字更多的時候才加載特定的用戶模型。