8

バックボーンで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/search.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ファイルはすべて最新バージョンです。

4

2 に答える 2

12

バックボーンとアンダースコアはAMDに準拠していません。デフォルトでは、RequireJSと互換性のあるインターフェースを提供していません。

以前のバージョンでは、RequireJSは問題を解決するための便利な方法を提供します

あなたの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();
});
于 2012-12-19T02:31:23.360 に答える
0

BAKの回答を拡張するには、baseUrlも提供する必要があります。

require.config({
  baseUrl: 'js',
...
});
于 2012-12-20T12:27:57.163 に答える