javascript - 无法读取未定义的属性 'View'

标签 javascript backbone.js requirejs

这是我第一次使用 backbone 的 require.js,我正在努力寻找我的观点的问题:

Cannot read property 'View' of undefined // search.js:8

我的目录结构是:

.
├── index.php
└── js
    ├── app.js
    ├── lib
    │   ├── backbone.js
    │   ├── backbone-min.js
    │   ├── jquery-min.js
    │   ├── require.js
    │   └── underscore-min.js
    ├── main.js
    ├── model
    ├── router.js
    ├── text.js
    └── view
        ├── error.js
        └── search.js

我的main.js:

require.config({
  paths: {
    jquery: 'lib/jquery-min',
    underscore: 'lib/underscore-min',
    backbone: 'lib/backbone-min',
    templates: '../templates'
  }

});

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',
  'view/search', // requests view/search.js
], function($, _, Backbone, SearchView){

  var AppRouter = Backbone.Router.extend({
    routes: {
      "": "home"
    }
  });

  var initialize = function(){
    var app_router = new AppRouter;
    app_router.on('route:home', function(){
      var homeView = new SearchView();
      homeView.render();
    });
    Backbone.history.start();
  };
  return {
    initialize: initialize
  };
});

和我的view/sea​​rch.js:

define([
  'jquery',
  'underscore',
  'backbone',
  'text!templates/search.html'
], function($, _, Backbone, searchTemplate){

  // console.log($,_,Backbone);

  var SearchView = Backbone.View.extend({
    ...
  });

  return SearchView;
});

当我取消注释上面的 console.log 时,_Backbone 都是 undefined$ 不是吨。我错过了什么?我所有的lib文件都是最新版本。

最佳答案

Backbone 和 Underscore 不符合 AMD 标准。默认情况下,它们不提供与 RequireJS 兼容的接口(interface)。

在上一个版本中,RequireJS provide a useful way to solve the problem :

你的 main.js:

require.config({
  shim: {
    underscore: {
      exports: '_'
    },
    backbone: {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone'
    }
  },
  paths: {
    jquery: 'lib/jquery-min',
    underscore: 'lib/underscore-min',
    backbone: 'lib/backbone-min',
    templates: '../templates'
  }

});

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

关于javascript - 无法读取未定义的属性 'View',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944672/

相关文章:

javascript - 没有babel的nodejs mocha es6模块意外 token 导出

javascript - 正在下载的文件没有正确的名称和扩展名

javascript - 添加到集合时指定额外属性

javascript - 在 requirejs 中需要一个库模块

javascript - 迁移现有的 RequireJS 应用程序以使用 Webpack

javascript - 如何在多个页面上使用 Backbone?

javascript - 如何取消订阅除当前用户和发布者之外的所有用户的视频

javascript - 如何通过facebook api获取我自己网页的活跃用户

javascript - Backbone.js 中的变量范围

backbone.js - 主干 : add event listener only if doesn't already exist