Присоединение дочерних моделей к родительской модели в Ember.js - PullRequest
1 голос
/ 27 марта 2012

У меня есть родительская модель, которая имеет много дочерних моделей, например:

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

Вот как мой метод 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)    

Однако, это, кажется, никогда не добавляет новые комментарии. Что я тут не так делаю?

1 Ответ

2 голосов
/ 27 марта 2012

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

...