2013-08-11 3 views
5

を定義するために、引数として渡された未定義のモジュールが私のアプリのためのjsの設定が必要になります。require.js - コールバックに私は以下のいる

require.config({ 
    paths: { 
     jquery: '../thirdparty/jquery-1.9.1.min', 
     moment: '../thirdparty/moment', 
     spinningwheel: '../thirdparty/datepicker/spinningwheel', 
     handlebars: '../thirdparty/handlebars', 
     colorgenerator: '../usercolors', 
     baseconfig: '../config'  }, 
    shim: { 
     'baseconfig': [], 
     'spinningwheel': { 
      deps: [], 
      exports: 'SpinningWheel' 
     }, 
     'handlebars': { 
      deps: [], 
      exports: 'Handlebars' 
     } 

    } 
}); 


require(['jquery', 'dom', 'helpers', 'actions', 'history', 'store'], function ($, dom, helpers, actions, hist, store) { 
    //all good on the home front at this point 
    //all modules loaded properly 
    history.render(); 
}) 

history.jsをapp.js

define(['renderview'], function (renderview) { 
    //all good here, render view is loaded properly 
    return { 
     render: function() { 
      renderview({...}); 
     } 
    }; 
}) 

レンダビュー.js

0あなたが見ることができるように
define(['jquery', 'helpers', 'dom'], function ($, helpers, dom) { 
    function renderView(view) { 
     var template = helpers.getTemplate(); //ERROR: helpers is undefined! 
    } 

    return renderView; 
}); 

helpers.js

define(['jquery', 'handlebars', 'history', 'dom', 'colorgenerator'], function ($, Handlebars, history, dom, ColorGenerator) { 
    var helpers = {}; 

    helpers.getTemplate = function() { 
     //do stuff 
    }; 

    return helpers; 
}); 

は、ヘルパーはinital app.jsコールバックでうまくロードされているが、私はrenderview.jsに入るとき、それは未定義です。この例の依存関係の配列は、私の実際のコードとまったく同じですが、すべてを編集しました。一見、無関係なコードです。ヘルパーがapp.jsではうまく読み込まれ、renderview.jsでは正しく読み込まれない理由は何ですか?これは循環依存ですか?私に似ていないが、私は:)これが長すぎる今日で任意のヘルプや提案のための

おかげであったかもしれません!

は、私は、このようにそれを行う必要があり、なぜ私は知りませんが:)

define(['require', 'jquery', 'dom'], function (require, $, dom) { 
    function renderView() { 
     //responsible for rendering our view 
     var helpers = require('helpers'); 
     var history = require('history'); 

     var v = history.get(); 
     ... 
     tmpl = helpers.getTemplate(v.template); 
     ... 
    } 

    return renderView; 
}); 

をので、私はこれらのモジュールは、内部の必要をやってなくても正常にロードするために得ることができなかった、現在のソリューションを追加しますコールバックを依存関係として指定します。あなたが必要とするコールでcircular dependencyどこかに持っているように...問題とあなたのソリューションを考える

+0

ヘルパーはgetTemplate方法がありますか? – Josh

+0

はい明快に編集します。 renderview.jsでは、** helpers **引数は、その関数だけでなく、未定義です。 – Greg

+0

これはうまくいきましたが、この修正プログラムを実装しなければならない理由がわかりません。私は "require"モジュールを必要とし、次にrenderview関数内から "require( 'helpers')"を実行する必要がありました。理由は分かりませんが、それは問題なく動作するようです。 – Greg

答えて

1

をそれがある理由にはいくつかの洞察を大好きだ、それが見えます。 helperモジュールに必要なモジュールの一部には、helpersモジュールも必要です。骨抜きにないコードで

+3

それが真実なら、それは記録されるべきではありませんか? – user239558