【发布时间】:2015-07-14 01:48:22
【问题描述】:
我对backbone.js 和requirejs 非常陌生,我正在尝试找出以下情况。
当我在“context.onScriptLoad”期间在 chrome 中加载我的应用程序时,我的路由器的初始化函数被调用。在这里,我正在使用我的应用程序控制器,但它仍然未定义。所以,我收到一条错误消息:
Cannot read property 'home' of undefined
我的路由器定义为:
define(['jquery', 'underscore', 'backbone', 'components/appController'],
function ($, _, Backbone, appController) {
var Router = Backbone.Router.extend({
routes: {
'': 'home',
'details/:id': 'details',
'createAgent': 'createAgent'
},
initialize: function () {
var routeName;
for (var r in this.routes) {
routeName = this.routes[r];
this.route(r, routeName, $.proxy(appController[routeName], appController));
}
},
start: function () {
Backbone.history.start();
}
});
return new Router();
}
);
appController 好像没有初始化。
控制器定义为:
define(['jquery', 'underscore', 'backbone'],
function ($, _, Backbone) {
var appController = {
currentView: null,
home: function () {
var self = this;
require(['views/homeView'], function (HomeView) {
var View = new HomeView();
self.renderView.call(self, View);
});
},
details: function (id) {
var self = this;
require(['views/detailsView'], function (DetailsView) {
var Agent = app.Agents.get(id);
var View = new DetailsView({ model: Agent });
self.renderView.call(self, View);
});
},
createAgent: function () {
var self = this;
require(['views/createView'], function (CreateView) {
var View = new CreateView();
self.renderView.call(self, View);
});
},
renderView: function (View) {
this.currentView && this.currentView.remove();
$('#main').html(View.render().el);
this.currentView = View;
}
}
});
我的 app.js 是
requirejs.config({
baseUrl: 'scripts/libs',
paths: {
models: '../models',
collections: '../collections',
views: '../views',
routers: '../routers',
components: '../components',
modalDialog: 'backbone.ModalDialog'
},
shim: {
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
'underscore': { exports: '_' }
}
})
var app = app || {};
require(['routers/router', 'components/dataService'], function (Router, dataService) {
$(document).ready(function () {
dataService.getData();
Router.start();
});
});
谁能解释我如何解决这个问题?
【问题讨论】:
-
您的控制器文件不需要返回
appController以便require.js 可以传递它吗?顺便说一句,你拥有的“控制器”东西通常是路由器本身的一部分,然后 Backbone 会自动连接routes对象中的东西。 -
感谢您的帮助!
标签: backbone.js requirejs