[英]How can I Pass a Custom function from Router, to View, to Template in Backbone.js?
[英]Requirejs + Backbone.js: TypeError: Can't pass in the router - Router is not a function?
我仍然试图理解requirejs
是如何工作的,我相信我已经仔细地遵循了文档和其他教程。 但我似乎无法加载某些module
,例如router
。
这是我遇到问题的视图模型,
// File: js/view/list.js
define([
'jquery',
'underscore',
'backbone',
'router', // Request router.js
// Pull in the Collection module.
'collection/contacts',
// Load the template
'text!template/list.html'
], function($, _, Backbone, Router, ProjectCollection, Template){
console.log(Router); // I have passed the router as Router!
var router = Router();
router.initialize();
});
结果,
未定义
list.js(第17行)TypeError:路由器不是一个函数
var router = Router();
这是js
文件夹根目录下的路由器代码,
// File: js/router.js
define([
'jquery',
'underscore',
'backbone',
'view/list'
], function($, _, Backbone, ProjectListView){
var AppRouter = Backbone.Router.extend({
routes: {
'list_contacts': 'renderListContactsPage'
},
renderListContactsPage: function () {
var projectListView = new ProjectListView();
projectListView.listContactsPage();
}
});
var initialize = function(){
var app_router = new AppRouter;
};
return {
initialize: initialize
};
});
任何想法我做错了什么,我该如何解决?
其他文件,
// File: js/main.js
require.config({
//By default load any module IDs from js/lib
baseUrl: 'js',
paths: {
jquery: 'lib/jquery/jquery-min',
underscore: 'lib/underscore/underscore-min',
backbone: 'lib/backbone/backbone-min',
text: 'lib/text/text'
},
shim: {
jquery: {
exports: '$'
},
underscore: {
exports: '_'
},
backbone: {
exports: 'Backbone'
}
}
});
require([
// Load our app module and pass it to our definition function
'app'
], function(App){
// The "app" dependency is passed in as "App"
App.initialize();
});
和,
// File: js/app.js
define([
'jquery',
'underscore',
'backbone',
'router', // Request router.js
], function($, _, Backbone, Router){
console.log(Router); // Here no error at all!
var initialize = function(){
// Pass in our Router module and call it's initialize function
Router.initialize();
Backbone.history.start();
}
return {
initialize: initialize
};
});
该错误消息可以解释这一切,真的:你的路由器模块的返回值(router.js)为对象文本 ,而不是一个函数调用等等()
上会导致异常(在蒸馏水此的jsfiddle )。
它应该足以将调用更改为:
// (...)
console.log(Router); // I have passed the router as Router!
Router.initialize();
或者,您可以更改路由器以实际返回一个返回具有initialize
函数的对象的函数,由您决定哪个解决方案更具可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.