2012-03-27 5 views
1

Ich habe ein übergeordnetes Modell, das viele Kind-Modelle, zum Beispiel hat:Anfügen Child Model zu einem Elternteil Modell in Ember.js

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

Dann habe ich einen Blick für das Blog:

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

Jetzt, wenn ich einen Blog über meine REST-API abrufe, enthält er die ersten 10 Kommentare oder so. Diese sind wie folgt instanziiert:

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

I Blog anzeigen lassen, indem BlogView.set Aufruf ('Blog', blogInstance) und alles anzeigt perfekt.

Jedoch!

Ich bin eine unendliche Scroll, also wenn der Endbenutzer an den unteren Rand der Kommentare kommt, möchte ich mehr laden. Ich tue dies über REST, aber ich kann nicht für das Leben von mir sie anzeigen, indem ich sie anhängt.

Dies ist, was mein morePosts() -Methode wie in BlogView aussieht:

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)  

Dies scheint jedoch nie die neuen Kommentare hinzufügen. Was mache ich hier falsch?

Antwort

2

Um Embers Bindungen und Beobachter richtig zu unterstützen, müssen Sie KVO-fähige Getter und Setter verwenden. Genau wie Sie get und set für Standardeigenschaften verwenden, müssen Sie auch spezielle Methoden für Arrays verwenden. In diesem Fall würden Sie verwenden. Sie können eine vollständige Liste der hier implementierten Funktionen sehen: https://github.com/emberjs/ember.js/blob/master/packages/ember-runtime/lib/mixins/mutable_array.js.

+0

Hat super funktioniert, danke! –

Verwandte Themen