2012-12-19 6 views
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ファイルは最新バージョンです。

答えて

12

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

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(); 
}); 
+0

はありがとう私の日の節約のために!ところで、アンダースコアもエクスポートする必要があります。 – Michelle

+0

確かに、私はそれを追加します。 – BAK

関連する問題