5

私はRequire.jsを初めて使用します。簡単だと思っていたものの、苦痛になり始めていることをやろうとしています。

バックボーンアプリケーションのグローバル名前空間を定義し、それをモジュールとしてロードしようとしています。これが私の名前空間(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')
    }
});

});

以前は、「アプリは未定義のエラー」が発生していました。今、私はこれを言う数分後にロードタイムアウトエラーを受け取ります:

Uncaught Error: Load timeout for modules: main

ただし、アラートは発生せず、main.jsは読み込まれていないようですが、ルーターは起動していると思います。TEWCが未定義であることを吠えません。そのため、自分の中にない場合でも読み込まれている可能性があります。ネットワークタブ?

これはおそらく新人の質問です-誰かがこれについて何か洞察を持っていますか?

4

2 に答える 2

2

次のコードはGlobalRouterを定義していませんが、defineコールバックに渡されます

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

GlobalRouterに追加define

次に、ロードに失敗した場合、mainアクセスしようとしているURLをコンソールから確認できますか?おそらく設定ミスです。

于 2013-03-25T12:24:22.110 に答える
2

私があなたの問題を誤解していないのならconfig.js、require.config()の後、define()は代わりにrequire()でなければならないということです。

さらに説明します。あなたは現在持っています:

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

これは実行したいコードdefineであるためです。requireモジュール定義ではありません。

これともちろん、前述のように欠落しているGlobalRouter依存関係。

于 2013-03-25T20:22:41.040 に答える