我得到了以下router.js:RequireJs:錯誤的模塊順序
define(['jquery', 'underscore', 'backbone', 'views/settings/index'], function($, _, Backbone, SettingsView) {
var Router = Backbone.Router.extend({
container: $('div.main'),
routes: {
"settings": "settings"
, "settings/:query": "settings"
},
settings: function(query) {
this.container.html(SettingsView.render().el);
}
});
if (Router._instance) return Router._instance;
Router._instance = new Router();
return Router._instance;
});
路由器被稱爲在提交的main.js其標記爲在requirejs配置第一依賴性:
define(['jquery', 'underscore', 'backbone', 'router'], function($, _, Backbone, router) {
// ajax settings (sent cors cookies)
$.ajaxSetup({ xhrFields: { withCredentials: true } });
// register master router
window.router = router;
// start backbone history
Backbone.history.start({ root: "/" });
});
在一些人認爲我現在想做的事:
define(['jquery', 'underscore', 'backbone', 'router'], function($, _, Backbone, router) {
var View = Backbone.View.extend({
initialize: function() {
router.on('route:settings', this.change, this);
},
change: function(query) {
// load some new content for example
}
});
return View;
});
比我收到此錯誤信息:
Uncaught TypeError: Cannot call method 'on' of undefined
UPDATE: 我加入的console.log到每個模塊。所以我知道模塊的執行順序。我提到requirejs有錯誤的順序:
view.js -> main.js -> router.js
代替:
router.js -> main.js -> view.js
讓我們知道怎樣才能解決這個
UPDATE2: 我現在包裹路由器事件綁定部分進入setTimeout循環:
setTimeout(function() {
window.router.on('route:settings', this.select, this);
}.bind(this), 20);
並看到它的作品!
這真正公正是一個修復,但仍然修復:)
老實說,我認爲你不應該以任何方式解決setTimeout的問題。 – robkuz