2013-03-25 23 views
5

私はRequire.jsを初めて使いました。私は単純だと思っていましたが、苦痛になり始めていることをしようとしています。Require.jsとバックボーンを使用してグローバルApp名前空間を定義する

私は、Backboneアプリケーション用のグローバル名前空間を定義し、それをモジュールとしてロードしようとしています。ここに私の名前空間(main.js)です:

define(
['jquery', 
    'underscore', 
    'backbone', 
    'GlobalRouter' 
], 
function($, _, Backbone) { 
var App= { 
    Models: {}, 
    Views: {}, 
    Collections: {}, 
    Routers: {}, 
    init: function() { 
     new App.Routers.GlobalRouter(); 
     Backbone.history.start(); 
    } 
} 
return App; 

}); 

とここに私のconfig.jsのファイルです:

require.config({ 
// your configuration key/values here 
baseUrl: "js", // generally the same directory as the script used in a data-main attribute for the top level script 
paths: { 
    'jquery' : '//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min', 
    'underscore': 'vendor/underscore-min', 
    'backbone': 'vendor/backbone-min', 
    'marionette': 'vendor/backbone.marionette', 
    'main' : 'main' 
}, // set up custom paths to libraries, or paths to RequireJS plugins 
shim: { 
    'underscore': { 
     exports: '_' 
    }, 

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

    'main' : { 
     deps: ['underscore', 'jquery', 'backbone', 'GlobalRouter'], 
     exports: 'TEWC' 
    } 

} // used for setting up all Shims (see below for more detail) 
}); 

define([ 
'jquery', 
    'underscore', 
    'backbone', 
    'main' 
], 
function($, _, Backbone, App, GlobalRouter) { 
console.log(App) 
alert('hit ') 
    $(function() { 
     App.init(); 
    }); 
} 

)。

と良い測定のために、ここに私のルータです。過去には

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

TEWC.Routers.GlobalRouter = Backbone.Router.extend({ 
    routes: { 
     "" : "index", 
     "documents/:id" : "edit", 
     "login" : "login" 
    }, 

    edit: function(id) { 
     alert('edit') 
    }, 

    index: function() { 
     alert('index') 
    }, 

    login: function() { 
     alert('login') 
    } 
}); 

}); 

、私はなっていた「アプリは、未定義のエラーです」。 、しかし、警告は発生しません、とmain.jsがロードされるようには見えませんが、私は、ルータがないと信じて

Uncaught Error: Load timeout for modules: main 

:今、私はこれを言い、数分後に負荷のタイムアウトエラーを取得しますTEWCが定義されていないことを知らないので、[ネットワーク]タブにないのにロードされている可能性があります。

これはおそらくルーキーの質問です。誰もこれについての洞察を持っていますか?

答えて

2

次のコードは、GlobalRouterを定義していない、まだそれが得るのは

define([ 
'jquery', 
    'underscore', 
    'backbone', 
    'main' 
], 
function($, _, Backbone, App, GlobalRouter) { 
console.log(App) 
alert('hit ') 
    $(function() { 
     App.init(); 
    }); 
} 

が、それはあなたがコンソールから確認し..can mainの読み込みに失敗しdefine第二

GlobalRouterを追加定義するコールバックに渡されたものをURLにアクセスしようとしていますか?おそらく誤設定です。

+0

これは、Addy OsmaniのTodoMVCとバックボーンを組み合わせたもので、その違いを生み出す必要があります(https://github.com/addyosmani/todomvc/tree/gh-pages/dependency-examples/backbone_require)!ありがとう! – streetlight

+0

streetlight:正確な問題は何だったのでしょうか?私も同様の問題があります。 –

+0

@ JohnEdward、私はmain.jsをAMDスタイルで、define関数などで設定しなければならないと思います。また、定義しているファイルの順序も関数のパラメータの順序と一致することを確認することが非常に重要です。これはまったく役に立ちますか? – streetlight

2

問題が間違っていない場合は、config.jsのrequire.config()の後にdefine()をrequire()する必要があります。

さらに説明します。現在持っている:

define([ 
'jquery', 
    'underscore', 
    'backbone', 
    'main' 
... 

これはあなたが実行したいコードであるため、このdefinerequireする必要があります。モジュール定義ではありません。

これは当然ながら前述のようにGlobalRouterの依存関係がありません。

関連する問題