2017-03-21 10 views
0

ローカルのjsonファイルからjsonオブジェクトを取得しようとしています。ファイルには2つのデータを含む配列が含まれています。Backbonejs - ビューを初期化するとコレクションが表示されない

私の見解initialize方法は結果を与えません。

私はここで間違いを犯しましたか?誰でも助けてくれますか?あなたが自動的に呼び出されませんinitialize: function() {}

render()this.render();を入れてあるでしょう

var Theater = { 
    Models: {}, 
    Collections: {}, 
    Views: {}, 
    Templates:{} 
} 

Theater.Models.Movie = Backbone.Model.extend({}); 

Theater.Collections.Movies = Backbone.Collection.extend({ 
    model: Theater.Models.Movie, 
    url: "scripts/data/movies.json", 
    initialize: function(){ 
     console.log("Movies initialize"); 
    } 
}); 

Theater.Views.Movies = Backbone.View.extend({ 
    initialize: function() { 
     console.log('view', this.collection, this.collection.models.length) //gives no results 
     _.bindAll(this, "render"); 
     this.collection.bind("reset", this.render); 
    }, 

    render: function(){ 
     console.log("render") 
     console.log(this.collection.length); nothing consoled 
    } 
}) 

Theater.Router = Backbone.Router.extend({ 
    routes: { 
     "": "defaultRoute" 
    }, 

    defaultRoute: function() { 
    console.log("defaultRoute"); 
    Theater.movies = new Theater.Collections.Movies() 
    new Theater.Views.Movies({ collection: Theater.movies }); 
    Theater.movies.fetch().done(function(){ 
     console.log(Theater.movies.length) //2 
    }); 

} 
}) 

var appRouter = new Theater.Router(); 
Backbone.history.start(); 

答えて

2

fetch(){reset: true}を渡さない限り、resetイベントがトリガーされません。代わりにsyncイベントにバインドする必要があります。

そして結合事象のためlistenToを使用するのは良いアイデアです:

this.listenTo(this.collection, 'sync', this.render); 
-1

は、ここに私のコードです。

+0

しかし、私は '私が見ることが動作するはずreset'に呼びかけています:' this.collection.bind(「リセット」、この.render); ' – 3gwebtrain

関連する問題