vyshkant
@vyshkant
developer

Как настроить и использовать RequireJS в CodeIgniter?

Здравствуйте!
Решил упорядочить 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" описать другие действия, кроме получения таблицы (редактирование, удаление строк), и мне также необходимо, чтобы всё делалось не автоматически, а по команде :)
Что я делаю не правильно? Как предотвратить автовыполнение описанного и сделать его выполнение по вызову?
Спасибо.
  • Вопрос задан
  • 344 просмотра
Решения вопроса 1
vyshkant
@vyshkant Автор вопроса
developer
Вопрос решен следующим образом:
в модуль app/controller/table внесены достаточно простые и очевидные изменения:
define(
    ['jquery', 'app/load_data'],
    function($, data) {
        return {
            get: function(){
                data.get_table('controller_name', 'method_name', function(table) {
	                $('.my_div').html(table);
                });
            }
        }
    }
);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы