Функция вызова JQuery вне Ajax на Ajax Успех? - PullRequest
1 голос
/ 01 октября 2009

В настоящее время я создал класс Javascript для разбивки на страницы, который автоматически разбивает комментарии на страницы, когда вы получаете более 10 страниц. Это прекрасно работает, но я хотел бы установить некоторые свойства CSS, только если на странице более 10 комментариев (добавьте место для кнопок для переключения между страницами). Это МОЖЕТ быть сделано в успехе ajax, но я хочу сохранить paginate.js, чтобы его можно было использовать в остальной части моего приложения (другие части приложения не нуждались в добавлении отступов), а не с кучей операторов if и else добавить отступы только в одном сценарии. Итак, есть ли способ, которым я могу связать событие с успехом функции ajax извне? Например, моя текущая страница содержит следующие файлы:

pagination.js
detail.js

Пагинация запускает вызов ajax, передавая ему следующие аргументы из detail.js:

  p = new paginate({
    table_id: 't1',
    pageselect_max: 7,
    rpp_options: [5,10,25,50],
    rpp: 5,
    columns: [''],
    wildcard: stock_symbol,
    url: 'trader/stocks/ajax/',
    action: 'paginate_comments',
    noresults: false
  });

Вот как выглядит ajax внутри pagination.js:

  this.get_results = function() {
    oThis = this; // Needed because inside the success function 'this' points to something else
    $.ajax({
      type: "POST",
      url: this.url,
      data: "action="+this.action+"&rpp="+this.rpp+"&page="+this.page+"&sortBy="+this.sortBy+"&sortDir="+this.sortDir+"&wildcard="+this.wildcard,
      dataType: "json",
      success: function(json) {
        if (json.error) {
          alert(json.error);
        }
        else {
          var data = json.data;
          oThis.count = data.count;
          $("#p_count").text(oThis.count);
          var resText = oThis.count == 1 ? "result" : "results";
          $("#p_results").text(resText);
          if (!data.disable_cufon) {
            Cufon.replace('h2');
            Cufon.replace('h1');
          }
          oThis.results = data.results;
          oThis.update_pageselect();
          oThis.display_results();
          oThis.do_rpp();
        }
      },
      error: function(error) {
        alert(error.responseText);
      }
    });
  }

Я хочу иметь возможность ссылаться на успех в detail.js и запускать это:

if(p.maxPages > 1){
  $("#commentscontainer .cmtgocontainer").css("margin-top","48px");
}

Я знаю, что это может быть достигнуто путем изменения асинхронного свойства, но это кажется плохой практикой. Есть ли лучшие способы сделать это без изменения pagination.js?

1 Ответ

3 голосов
/ 01 октября 2009

Вы можете сделать свою собственную функцию обратного вызова и вызвать ее в pagination.js:

Например:

//In your success callback:
if (typeof oThis.onPaginateComplete === "function")
    oThis.onPaginateComplete();

Затем вы могли бы написать следующее подробно.js:

p.onPaginateComplete = function() {
    if (this.maxPages > 1) {
        $("#commentscontainer .cmtgocontainer").css("margin-top","48px");
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...