Шаблон модуля, проблема обратного вызова jquery;

0

Извините за псевдокод, но я не могу опубликовать исходный код здесь (политика компании).

У меня есть два "класса" в javascript, класс CLS2, который я использую для заполнения DIV с помощью HTML, который поступает с сервера (на самом деле это таблица). Для этого я использую метод LOAD в jquery.

Класс CLS1 вызывает CLS2 для загрузки таблицы HTML и после попытки получить некоторую информацию из таблицы с помощью метода jquery FIND.

Я знаю, что происходит. Когда я пытаюсь получить эту информацию внутри таблицы, я не могу этого сделать, потому что таблица HTML еще не готова.

Но если я использую метод jquery КОГДА, я догадался, я должен это сделать. Но пока это не работает.

Если я использую обратный вызов метода jquery LOAD, все работает нормально, но когда я использую WHEN, он не ждет, когда HTML-таблица будет готова.

Я что-то забыл?

У меня есть возврат из метода jquery LOAD. Можно ли проверить это возвращение, если содержимое готово? console.log(retParam);

CLS2:

var cls2 = (function ($) {

    return { 

        load: function() {

            return this.populateDiv();

        },


        populateDiv: function() {

            var ret = $('#content').load('url', function(){

                // IF I USE THE JQUERY METHOD FIND HERE WORKS FINE

            });

            return ret;

        }

    };

}(jQuery));

CLS1:

var cls1 = (function ($) {

    return { 

        init: function(){

            this.config();

        },

        config: function() {

            $.when(cls2.load()).then(this.doPagination());

        },


        doPagination: function(retParam) {

            console.log(retParam);

            var val = $('#datatable').find('.tdActive').val();

        }

    };

}(jQuery));

JQUERY Ready

$(document).ready(){

    cls1.init();

}
  • 0
    Вы оборачиваете обе эти функции в анонимные функции, заставляя их выполняться во время загрузки. Попробуйте просто назначить var CLS1 = { init: ..., config: ..., doPagination: ... }; var CLS2 = { init: ..., populateDiv: ... } Кроме того, возможно ли, что они будут включены на страницу до того, как будет определен jQuery ?
Теги:

1 ответ

2
Лучший ответ

load возвращает jQuery, а не обещание. если вместо .load() вы заменяете .load() на .get(), поскольку.get() возвращает обещание (фактически jqXhr), которое вы можете делать.when on.

что-то вроде

var ret = $.get( "url", function( data ) {
  $( '#content' ).html( data );
});

return ret;
  • 0
    Все еще выполняется согласно моим тестам ; (Очевидно, что порядок является спорным, поскольку обратный вызов load происходит в «другом потоке».)
  • 0
    @BradChristie, потому что $.when($()).done(cb) Done $.when($()).done(cb) также будет выполнять обратный вызов done. если вы не сделаете это .get вместо этого, вы просто получите объект jquery, который на самом деле имеет метод обещания, который возвращает объект обещания, который уже разрешен, если анимация в данный момент не выполняется.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню