У меня есть следующая настройка js для моего приложения:
app.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();
})
история.js
define(['renderview'], function (renderview) {
//all good here, render view is loaded properly
return {
render: function () {
renderview({...});
}
};
})
рендервью.js
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;
});
Итак, как вы можете видеть, хелперы нормально загружаются в начальном обратном вызове 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;
});
Таким образом, я не мог заставить эти модули загружаться должным образом, не выполнив требование внутри обратного вызова, а не указав их как зависимость. Хотелось бы понимания, почему так...