Здравствуйте!
Решил упорядочить JS-код в проекте на CodeIgniter, для реализации выбрал RequireJS, поскольку посчитал его легким в настройке и простым в использовании.
Столкнулся с непониманием кое-чего.
В проекте есть несколько страниц, на каждой из которых есть таблица, в которую подгружаются данные через ajax. Но на разных страницах данные подгружаются при обращении к разным контроллерам и разным методам.
Поэтому было решено вынести запрос таблицы в отдельный модуль, передавая ему в аргументы контроллер и метод, к которому надо обратиться.
Модуль
app/load_data:
define(
['jquery'],
function($) {
return {
get_table : function(controller, method, callback_func) {
$.ajax({
type: 'POST',
url: '/'+controller+'/'+method+'/',
success: function(answer) {
callback_func(answer);
}
});
},
}
}
);
В итоге я рассчитывал, что этот модуль будет мирно лежать, пока другой модуль явно не вызовет get_table() и не передаст ему аргументы контроллера, метода и колбэка.
Вот модуль
app/controller/table, вызывающий модуль
app/load_data:
define(
['jquery', 'app/load_data'],
function($, data) {
return {
get: data.get_table('controller_name', 'method_name', function(table) {
$('.my_div').html(table);
})
}
}
);
При этом модуль
app/controller/table вызывается из точки входа:
require(
['app/controller/table'],
function(table){
// table.get;
}
);
Да-да, строчка table.get действительно закомментирована, но вся необходимая работа делается, т.е. идет ajax-запрос, данные возвращаются, коллбэк их вставляет в div.my_div и всё хорошо :)
Очевидно, что я неправильно понимаю логику работы RequireJS.
Я хотел бы, чтобы описанные действия происходили после вызова мной "table.get" или чего-то другого явно, чтобы я мог это вызвать из хендлера, например.
Кроме того, я думал в модуле "app/controller/table" описать другие действия, кроме получения таблицы (редактирование, удаление строк), и мне также необходимо, чтобы всё делалось не автоматически, а по команде :)
Что я делаю не правильно? Как предотвратить автовыполнение описанного и сделать его выполнение по вызову?
Спасибо.