2012-03-27 7 views
1

で親モデルに子モデルを追加は:私は例えば、多くの子モデルを持つ親モデルを持っているEmber.js

App.Blog = Ember.Object.extend({}) 
App.Comment = Ember.Object.extend({}) 

その後、私はブログのビューを持っている:

window.App.BlogView = Ember.View.extend 
    templateName: 'app_templates_blog' 

今、最初にREST API経由でブログを取得すると、最初の10件のコメントが含まれています。これらは、次のようにインスタンス化されています

window.App.Blog.reopenClass 
    create: (obj) -> 
    Object.tap @_super(obj), (result) => 
     if result.comments 
     result.comments = result.comments.map (p) => App.Comment.create(p) 

は、私が(「ブログ」、blogInstance)BlogView.setを呼び出し、すべてが完璧に表示されることにより、ブログで表示します。

ただし、

私は無限のスクロールを実装しています。そのため、エンドユーザーがコメントの一番下に来たときに、もっと読み込みたいと思います。私はRESTを介してこれを行いますが、私の人生のためにそれらを追加して表示させることはできません。

これは私のmorePosts()メソッドはBlogViewで次のようになります。

moreComments:() -> 
    blog = @get('blog') 

    jQuery.getJSON "/blogs/#{blog.get('id')}/comments", (result) =>   
    comments = blog.get('comments') 
    result.each (c) => comments.push(App.Comment.create(c)) 
    blog.set('comments', comments) 
    this.set('blog', blog)  

しかし、これは新しいコメントを追加するには思われません。私はここで間違って何をしていますか?

答えて

2

Emberのバインディングとオブザーバを正しくサポートするには、KVO対応ゲッタとセッタを使用する必要があります。標準プロパティにgetsetを使用するのと同じように、配列に対しても特別なメソッドを使用する必要があります。この場合、pushObjectを使用します。ここに実装されている機能の完全なリストを見ることができます:https://github.com/emberjs/ember.js/blob/master/packages/ember-runtime/lib/mixins/mutable_array.js

+0

ありがとう! –

関連する問題