Функция atwho() с использованием at.js не работает в ajax

Я создал собственный плагин jquery, используя at.js, как это,

(function ($) {

$.fn.mention = function (options) {

    var defaults = {
        at: "@",
        dataType: "json",
        source: "",
        data: {}
    };

    var settings = $.extend({}, defaults, options);

    $.ajax({
        url: settings.source,
        data: settings.data,
        dataType: settings.dataType,
        method: "POST",
        success: function (result) {
            if (result.success) {
                $(this).atwho({
                    at: settings.at,
                    data: result.data
                });
            }
        }
    });

};
})(jQuery);

Я использую плагин, как это,

$('#textbox').mention({
    source: "<?php echo_uri("..some_links"); ?>",
    data: {some_data: some_data_value}
});

И данные об успехе ajax, производят именно тот массив json, который мне нужен. Здесь я хочу упомянуть, что, если я добавлю данные вручную в atwho(), это будет работать нормально. Но этот метод не работает.

Пожалуйста, предоставьте любое решение.

Заранее спасибо.

1 ответ

Решение

Внутри обратного вызова, я думаю, этот указатель больше не ссылается на ваш элемент, если вы не укажете свойство context:

$.ajax({
   ...
   context: this,

Затем в обратном вызове это будет относиться к объекту jQuery, представляющему плагин. ИЛИ, вне ajax определите переменную:

var that = this; //that can be accessed by your callback
$.ajax({
  ..,
  success: function(..) {
     $(that).atwho(..);
  }

Оба варианта должны работать.

Другие вопросы по тегам