2015-01-19 3 views
0

Я пытаюсь обновить свою модель с помощью WebSocket, я сделал это в следующем виде:Как обновить модель через WebSocket?

socket.on('message', function (jsonObj) { 
    if (jsonObj.action && jsonObj.action == 'consultationReload') 
    { 
     self.store.all('consultation').forEach(function(c) { 
      if (c.get('id') == jsonObj.consultationId) { 
       c.reload(); 
      } 
     }); 
     return; 
    } 

Но c.reload() делает запрос к API. И я думаю, что это дополнительный запрос, который я мог бы прикрепить эти данные к сообщению из websocket. Но вопрос в том, как перезагрузить модель этими данными json из websocket?

ответ

0

Вместо того чтобы получать все записи из магазина, всего push запись в магазин. Любая запись, которая уже находится в магазине, будет обновлена, любая запись, которая там не будет, будет вставлена.

this.store.push('consultation', { 
    id: 2, 
    title: "Calgary b/w I Can't Make You Love Me/Nick Of Time", 
    artist: "Bon Iver", 
    songCount: 2 
}); 

http://emberjs.com/guides/models/pushing-records-into-the-store/

http://emberjs.com/api/data/classes/DS.Store.html#method_push

http://emberjs.com/api/data/classes/DS.Store.html#method_pushMany

+0

Я попытался это, но консультации модель вместе с моделью пользователя и модели Records. И 'c.reload()' обновляет все объединенные модели, но 'push' обновляет только модель консультаций. Так мне нужно называть 'push' для каждой модели? – Dmitro

+0

Если у вас есть записи другой модели – Kingpin2k

+0

'this.store.pushPayload ('consult', jsonObj.consultationData);' Это работает для меня. Но у меня есть еще один вопрос, если я хочу обновить только модель User, как мне нужно сообщить объединенной модели консультаций, что модель User была обновлена? Потому что я пытался сделать 'this.store.push ('user', userData);' и когда я пытаюсь попасть в модель консультаций 'this.get ('user.status')' для вычисления некоторого свойства, я получаю старое значение Статус пользователь – Dmitro

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