javascript - Backbone 错误无法调用 Deferred 方法

标签 javascript jquery backbone.js requirejs marionette

我收到错误“无法调用文件中未定义的方法‘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/

相关文章:

Javascript 函数将运行并在 1 秒后自动删除

javascript - 为什么这个 css transition 不能制作从一个点到另一个点的平滑动画?

javascript - 启动 meteor 应用程序时出现错误 'Path reservation conflict'

javascript - Backbone : Show validation errors for each model in a collection on VIEW

backbone.js - 覆盖主干 'set' 方法

javascript - 如何计算 jqGrid 中的行数?

javascript - 单击时从 jquery 可排序列表中删除一个元素

java - Spring ajax 400(错误请求)

jquery - 取消jquery自动刷新定时器

javascript - 主干 View Uncaught ReferenceError