我使用一个非常简单的路由器来路由所有页面请求。我通过实例化BVApp来启动我的应用程序。
最近,我添加了路由,我只使用了第一个参数page1
。如何将此参数传递给我的BVApp代码。
我知道我可能不应该通过构造函数传递它,因为Backbone只允许使用_.pick
的某些参数。见here
我可以将它作为BVApp上的方法调用吗?
SO post for ideas在Googled 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();
答案 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
函数。