我收到错误“无法调用文件中未定义的方法‘Deferred’”。 backbone.marionette.min.js 错误:20
为什么?谢谢
配置:
require.config({
baseUrl:"/static/js/portalApp/",
paths: {
jquery: '//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min',
underscore: '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min',
backbone: '//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone-min',
marionette: '//cdnjs.cloudflare.com/ajax/libs/backbone.marionette/1.1.0-bundled/backbone.marionette.min',
bootstrap: '//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.2/js/bootstrap.min',
templates: '/static/portalApp',
// Plugins
handlebars: '//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.1.2/handlebars.min',
text: '/static/js/libs/text'
},
shim : {
jquery : {
exports : 'jQuery'
},
underscore : {
exports : '_'
},
backbone : {
deps : ['jquery', 'underscore'],
exports : 'Backbone'
},
marionette : {
deps : ['jquery', 'underscore', 'backbone'],
exports : 'Marionette'
},
bootstrap: {
deps: ['jquery']
},
handlebars:{
"exports": "Handlebars"
}
}
});
require(["App", "routers/AppRouter", "controllers/Controller", "jquery" , "bootstrap"],
function (App, AppRouter, Controller) {
App.appRouter = new AppRouter({
controller:new Controller()
});
App.start();
});
App.js
define(['jquery', 'backbone', 'marionette', 'underscore'],
function ($, Backbone, Marionette, _) {
var App = new Backbone.Marionette.Application();
//Organize Application into regions corresponding to DOM elements
//Regions can contain views, Layouts, or subregions nested as necessary
App.addRegions({
headerRegion:"header",
mainRegion:"#main"
});
App.addInitializer(function () {
Backbone.history.start();
});
return App;
});
路由器
define(['backbone', 'marionette'], function(Backbone, Marionette) {
return Backbone.Marionette.AppRouter.extend({
//"index" must be a method in AppRouter's controller
appRoutes: {
"": "index"
}
});
});
Controller :
define(['App', 'backbone', 'marionette', 'views/HeaderView'],
function (App, Backbone, Marionette, HeaderView) {
return Backbone.Marionette.Controller.extend({
initialize:function (options) {
App.headerRegion.show(new HeaderView());
},
//gets mapped to in AppRouter's appRoutes
index:function () {
//App.mainRegion.show(new WelcomeView());
}
});
});
最佳答案
您得到的错误与 Backbone not finding jQuery 一致。 Marionette source code恰好包含符号 Deferred
的两个实例。两次都是:
this._deferred = Marionette.$.Deferred();
Marionette.$
是这样初始化的:
Marionette.$ = Backbone.$;
和we've already established Backbone.$
设置为 jQuery 的 $
符号。
所以如果 Backbone 找不到 jQuery,那么 Backbone.$
是未定义的,Marionette.$
是未定义的,这个未定义的值不能有 Deferred
方法。因此,“无法调用未定义 [...] 的方法 'Deferred'”
关于javascript - Backbone 错误无法调用 Deferred 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19952942/