2013-10-28 6 views
6

私はかなりの異なるモデルが表示されているので、私のアプリケーションにはかなり複雑なページがあります。私は/updates REST呼び出しを通してこれらのモデルのいくつかをライブアップデートしています。 last_request_timestampパラメータを渡し、最後の呼び出し以降に作成または変更されたモデルを返します。モデルを店舗にプッシュするときの表示を更新

store.push(model, model_json)を使用してモデルをストアに追加します。ただし、モデルをプッシュした後はテンプレートは更新されません。ストアのモデルとビューの間にバインディングがあることを確認するにはどうすればよいですか?

答えて

5

わかりました。 Ember.js FAQ

と言います。一方、フィルタは、ストアのキャッシュ内のすべてのレコードのライブ検索を実行します。新しいレコードがストアにロードされるとすぐに、フィルタはレコードが一致するかどうかを確認し、一致する場合は検索結果の配列に追加します。その配列がテンプレートに表示されると、自動的に更新されます。

...

は店がそれらについて知っていない場合は、レコードがフィルタに表示されませんことを覚えておいてください。ストアのpush()メソッドを使用して、レコードがストア内にあることを確認できます。

私はライブアップデートしたいと思うコントローラのために、私はfilter()を使ってモデルをフェッチします。 I新しいCommentpush()を保存する時はいつでも今

App.PostController = Ember.ObjectController.extend({ 
    comments: function() { 
    var postId = this.get('id'); 
    return this.get('store').filter('comment', function(comment) { 
     return comment.get('post.id') == postId; 
    }); 
    }.property('comments') 
}); 

は、それが自動的にビューで適切なポストに追加されます。

0

pushObjectを使用して、ページに表示されているコレクションに明示的にプッシュする必要があります。 store.pushはライブレコードを返すので、このようなことができます。

BooksControllerが標準 ArrayControllerであると仮定しています
var book_record = store.push('book', model_json); 
this.get('controllers.books.content').pushObject(book_record); 

0

残念ながら、2つのステップ(しかし簡単なステップ)が必要です。それをストアに追加してから、アダプターを介してリスナーに変更を伝播させるためにレコードを保存する必要があります。

var pushedRecord = store.push(model, model_json); 
pushedRecord.save(); 

また、複数のレコードがある場合は、それぞれを個別に押すのではなく、pushManyを呼び出すことができます。それでもそれぞれを保存する必要があります。

store.pushMany(model, jsonArray).forEach function (pushedInstance) { 
    pushedInstance.save(); 
} 
+0

save()を呼び出す必要はありません。ただ追加するだけで十分です。 – kumkanillam

関連する問題