Requirejs + Backbone Uncaught TypeError:无法读取未定义的属性'each'

时间:2014-12-27 00:56:38

标签: javascript backbone.js requirejs

错误指向backbone.js:219库。错误在require(['app'],function。

中的main.js文件中抛出

main.js文件:

require.config({
  baseUrl: 'scripts',

  paths: {
    app: '../app',
    jquery: 'jquery',
    underscore: 'underscore',
    backbone: 'backbone',
    router: '../router'
  },

  shim: {
        backbone: {
            deps: ['jquery','underscore'],
            exports: 'Backbone'
        }
    }
});

require(['app'], function (App) {
    App.initialize();
});

我的app.js文件:

define([
  'jquery',
  'underscore',
  'backbone',
  'router' // Request router.js
], function($, _, Backbone, Router){

  var initialize = function(){
    // Pass in our Router module and call it's initialize function
    Router.initialize();
  };

  return {
    initialize: initialize
  };
});

我的router.js文件:

define(['jquery', 'underscore', 'backbone'], function ($, _, Backbone) {


  'use strict';

  // Router
  var AppRouter = Backbone.Router.extend({

    routes:{
      "":"list",
      "wines/:id":"wineDetails"
    },

    list:function () {
      // ...
    },

    wineDetails:function (id) {
      // ...
    }
  });
  var initialize =  function(){
    var app_router = new AppRouter;
    Backbone.history.start();
  };

  return {
    initialize: initialize
  };
});

这个问题似乎与this one类似,但这些建议都不适合我。

2 个答案:

答案 0 :(得分:0)

router.js中有两个错误。

  1. 使用"定义"替换"要求";
  2. 返回对象必须包含"初始化"方法;
  3. 像这样的代码,

    define(['jquery', 'underscore', 'backbone'], function ($, _, Backbone) {
      'use strict';
    
      // Router
      var AppRouter = Backbone.Router.extend({
    
        routes:{
          "":"list",
          "wines/:id":"wineDetails"
        },
    
        list:function () {
          // ...
        },
    
        wineDetails:function (id) {
          // ...
        }
      });
      var initialize =  function(){
        var app_router = new AppRouter;
        Backbone.history.start();
      }
      return {
        initialize: initialize
      };
    });
    

答案 1 :(得分:-1)

ummmm

(function($) {
    var menu = $('.responsive-menu'), open;
    $('.menu-btn').click(function () {
        if(!open) {
            if(menu.height() > $(window).height()) {
                open = true;
                menu.css({'bottom': '0px', 'overflow': 'auto'});
                document.body.style.overflow = 'hidden';
            }
        } else {
            open = false;
            menu.css({'bottom': '', 'overflow': ''});
            document.body.style.overflow = '';
        }
        menu.toggleClass('expand');
    });
})(jQuery);

我的第一个猜测是,在某些时候,RequireJS需要找出jrc,Backbone,Underscore等的src /可执行文件的位置。