我有一个包含许多子模型的父模型,例如:
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)
然而,这似乎从未添加新评论。我在这里做错了什么?
答案 0 :(得分:2)
要正确支持Ember的绑定和观察者,您需要使用KVO识别的getter和setter。正如您对标准属性使用get
和set
一样,您还必须对数组使用特殊方法。在这种情况下,您使用pushObject
。您可以在此处查看完整的功能列表:https://github.com/emberjs/ember.js/blob/master/packages/ember-runtime/lib/mixins/mutable_array.js。