2015-01-19 2 views
0

나는 내가 다음 방법으로 그것을 만든 웹 소켓을 통해 내 모델을 업데이트하려고 :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에서 메시지에이 데이터를 첨부 할 수있는 추가 요청이라고 생각합니다. 하지만 질문은 webSocket에서 이러한 json 데이터로 모델을 다시로드하는 방법입니까?

답변

0

저장소의 모든 레코드를 가져 오는 대신 저장소에 레코드 인 push 만 가져옵니다. 이미 상점에있는 모든 레코드가 갱신되고, 거기에없는 레코드는 삽입됩니다.

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

+0

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

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

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 }); 
는 그 시도했지만 상담 모델은 사용자 모델과 기록 모델에 합류했다. 그리고'c.reload()'는 조인 된 모든 모델을 업데이트하지만'push'는 상담 모델 만 업데이트합니다. 그렇다면 각 모델에 대해 'push'를 호출해야합니까? – Dmitro

+0

다른 모델의 레코드가있는 경우 – Kingpin2k

+0

'this.store.pushPayload ('consultation', jsonObj.consultationData);'그것은 저에게 적합합니다. 그러나 사용자 모델 만 업데이트하려는 경우 한 가지 더 궁금한 점이 있습니다. 사용자 모델이 업데이트 된 가입 된 컨설테이션 모델에 대해 어떻게 말해야합니까? 'this.store.push ('user', userData);를 시도했기 때문에 상담 모델'this.get ('user.status')'에 들어가려고 할 때 일부 속성을 계산하기 위해 나는 오래된 값을 얻는다. user.status – Dmitro

관련 문제