を定義するために、引数として渡された未定義のモジュールが私のアプリのための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どこかに持っているように...問題とあなたのソリューションを考える
ヘルパーはgetTemplate方法がありますか? – Josh
はい明快に編集します。 renderview.jsでは、** helpers **引数は、その関数だけでなく、未定義です。 – Greg
これはうまくいきましたが、この修正プログラムを実装しなければならない理由がわかりません。私は "require"モジュールを必要とし、次にrenderview関数内から "require( 'helpers')"を実行する必要がありました。理由は分かりませんが、それは問題なく動作するようです。 – Greg