2016-09-22 10 views
2

私は非常に単純なルータを使用してすべてのページ要求をルーティングします。私はBVAppをインスタンス化することによって私のアプリを起動します。メインビューにルートパラメータを渡すには?

最近、私はルーティングを追加しました。最初のパラメータはpage1です。このパラメータをBVAppコードにどのように渡すことができますか。

_.pickを使用するバックボーンによって特定のパラメータのみが許可されているため、コンストラクタ経由で渡すべきではないことがわかりました。 here

私はおそらくBVAppの方法と呼ぶことができますか?

Googled searchが何も明らかにならずにこのSO post for ideasを見ました。

私のアプリケーションへの私のエントリーポイントは、おそらくバックボーン・ビューであってはなりませんか?

// BRMain 
var BRMain = Backbone.Router.extend({ 
    Name: 'BRMain', 
    routes: { 
     "*page1(/:supertag)(/:tag)": "main" 
    } 
}); 

var router = new BRMain(); 

// matches 
// domain.com 
// domain.com#page1 
// domain.com#page1/supertag 
// domain.com#page1/supertag/tag 
router.on('route:main', function (page1, supertag, tag) { 
    var App = $A.Mod.add(new BVApp()); 
}); 

Backbone.history.start(); 

// BVApp 
var BVApp = Backbone.View.extend({ 
    Name: 'BVApp', 
    el: window, 
    initialize: function() { 
     var public_page = $A.Reg.get('pub_req'); 
     var token = Storage.getToken(); 

答えて

0

initialize機能は、あなたのビューのコンストラクタに渡すと同じオブジェクトであるオプションのoptionsオブジェクトを取ります。

router.on('route:main', function(page1, supertag, tag) { 
    // pass any arguments inside the object here 
    var App = $A.Mod.add(new BVApp({ 
     page: page1 
    })); 
}); 

var BVApp = Backbone.View.extend({ 
    Name: 'BVApp', 
    el: window, 
    initialize: function(options) { 
     options = options || {}; 

     // then you can use them here 
     this.page = options.page; 
    } 

}); 

これはバックボーンのドキュメントではよく説明されていませんが、すべてのオブジェクトの共通パターンです。たとえば、Backbone's View sourceというサンプルがあります。実際に

var View = Backbone.View = function(options) { 
    this.cid = _.uniqueId('view'); 
    _.extend(this, _.pick(options, viewOptions)); 
    this._ensureElement(); 

    // lastly, they call initialize passing all arguments along 
    this.initialize.apply(this, arguments); 
}; 

、バックボーンに、コンストラクタに渡される引数はinitialize関数に渡されます。

関連する問題