2012-03-27 5 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) 

я показываю на блоге, позвонив BlogView.set («блог», blogInstance) и все отображения отлично.

Однако!

Я реализую бесконечный прокрутки, поэтому, когда конечный пользователь добирается до нижней части комментариев, я хочу загрузить больше. Я делаю это через 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

Для правильной поддержки привязок и наблюдателей Эмбера вам необходимо использовать KVO-осведомленные геттеры и сеттеры. Так же, как вы используете get и set для стандартных свойств, вам также необходимо использовать специальные методы для массивов. В этом случае вы должны использовать pushObject. Вы можете увидеть полный список функций, реализованных здесь: https://github.com/emberjs/ember.js/blob/master/packages/ember-runtime/lib/mixins/mutable_array.js.

+0

Работал отлично, спасибо! –

Смежные вопросы