如何将路由参数传递给主视图?

时间:2016-09-22 18:17:56

标签: javascript backbone.js

我使用一个非常简单的路由器来路由所有页面请求。我通过实例化BVApp来启动我的应用程序。

最近,我添加了路由,我只使用了第一个参数page1。如何将此参数传递给我的BVApp代码。

我知道我可能不应该通过构造函数传递它,因为Backbone只允许使用_.pick的某些参数。见here

我可以将它作为BVApp上的方法调用吗?

SO post for ideasGoogled search拉出任何明显的东西之后,我看了HttpSession.getMaxInactiveInterval()

也许我的应用程序入口点根本不应该是Backbone View?

// 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();

1 个答案:

答案 0 :(得分: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的文档中没有很好地解释这一点,但它是所有对象的常见模式。例如,这是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);
};

实际上,传递给Backbone中的构造函数的任何参数都会传递给initialize函数。