将子模型附加到Ember.js中的父模型

时间:2012-03-27 18:12:26

标签: coffeescript 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)

我通过调用BlogView.set('blog',blogInstance)在博客上显示,一切都显示完美。

然而!

我正在实现无限滚动,所以当最终用户到达评论的底部时,我想加载更多。我通过REST做到这一点,但我不能为我的生活通过追加它们来展示它们。

这是我在BlogView中的morePosts()方法:

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)    

然而,这似乎从未添加新评论。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

要正确支持Ember的绑定和观察者,您需要使用KVO识别的getter和setter。正如您对标准属性使用getset一样,您还必须对数组使用特殊方法。在这种情况下,您使用pushObject。您可以在此处查看完整的功能列表:https://github.com/emberjs/ember.js/blob/master/packages/ember-runtime/lib/mixins/mutable_array.js