2012-05-23 4 views
4

У меня есть следующая ситуация, и я думаю, что лучший способ справиться с этим - использовать Backbone relation.
Пожалуйста, исправьте меня, если есть другое решение.Backbone отношение: как положить в отношение коллекция и модель?

У меня есть одна коллекция (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. Сколько данных сервер вернет? Вам действительно нужны все атрибуты пользователей?

Итак, в заключение я бы по-прежнему утверждал, что вы возвращаете имя пользователя непосредственно с сервера и загружаете определенную модель пользователя только тогда, когда вам нужно больше, чем его имя.

Смежные вопросы