0

はい、私は JS と backbonejs が初めてです。

今すぐ問題を掘り下げましょう。

backbonejs Controllerで非常に奇妙な動作をしています。

これが私のコントローラーのコードです

var controller = Backbone.Controller.extend( {
    _index: null,

    routes: {
        "": "index"                   
    },


    initialize: function(options){

        var self = this;
        if (this._index === null){

            $.getJSON('data/album1.json',function(data) {
                 //this line is working self._index is being set
                 self._index = new sphinx.views.IndexView({model: self._photos});
            });
            Backbone.history.loadUrl();   
        }

    },

    index: function() {
         //this line is not working
         //here THIS is pointing to a different object
         //rather than it was available through THIS in initialize method
        this._index.render();
    }

});

コントローラーを開始するためのファイルの最後にある行を次に示します。

removeFallbacks();
gallery = new controller;
Backbone.history.start();

今、私は何かが欠けています。しかし、何??? これが間違っている場合、正しい方法は何ですか?? indexメソッドのinitializeメソッドから設定したプロパティにアクセスする必要があります。

indexメソッドの呼び出し元関数がスコープを変更しているようです。その範囲を維持する必要があります。

4

1 に答える 1

0

コントローラではなく、バックボーン ルートにルート アクションを指定する必要があります。ルーターの内部は、コントローラーとビューを初期化する場所です。

また、メソッド Backbone.history.loadURL() はありません。代わりに Backbone.history.start() を使用してから、ルーター インスタンスでナビゲートを呼び出す必要があると思います。

var myApp = Backbone.Router.extend( {
    _index: null,

    routes: {
        "": "index"                   
    },

    initialize: function(options){
        //Initialize your app here
        this.myApp = new myApp();
        //Initialize your views here
        this.myAppViews = new myAppView(/* args */);

        var self = this;
        if (this._index === null){

            $.getJSON('data/album1.json',function(data) {
                 //this line is working self._index is being set
                 self._index = new sphinx.views.IndexView({model: self._photos});
            });
            Backbone.history.loadUrl(); //Change this to Backbone.history.start();
        }

    },

    // Route actions
    index: function() {
        this._index.render();
    }
});
于 2013-03-31T17:59:57.503 に答える