Плагин jQuery: использование обратного вызова для изменения поведения плагина

Я использую плагин ввода токена jQuery и хотел бы изменить его поведение при добавлении токена.

Я добавил обратный вызов onAddToken в исходный код, чтобы видеть, когда токен добавляется в поле ввода, но я не уверен, как изменить URL -адрес tokenInput из "url / to / call" на новый URL "новый / url / to / call".

this, $ this и $(this) не работают. Какие-либо предложения?

$("#input").tokenInput("/url/to/call", {
        noResultsText: "No results yet. Type some more...",
        searchingText: "Searching...",
        onAddToken: function(args) {
            // alter tokenInput itself to use "new/url/to/call" instead of 
            // the original "url/to/call/"
    }
 });

1 ответ

Решение

Проблема в том, что любые аргументы функций, которые являются нативными типами (числа, строки и т. Д.), Будут передаваться по значению (копироваться) в вызываемую функцию. Вы хотите иметь аргумент, который передается по ссылке, и единственный способ сделать это в javascript - это передать объект.

На сайте вызовов (в плагине) вызовите функцию примерно так:

config.onAddToken({url: myUrlVar});

затем в вашем обратном вызове вы можете изменить значение свойства url переданного объекта.

$("#input").tokenInput("/url/to/call", {
        noResultsText: "No results yet. Type some more...",
        searchingText: "Searching...",
        onAddToken: function(oUrl) {
            oUrl.url = "mynew/url";
        }
});

Это полезно в тех случаях, когда вы хотите передать несколько значений по ссылке, в вашем случае, однако, вы можете просто захотеть, чтобы ваш обратный вызов возвращал любое значение URL, которое вы хотите использовать в плагине, это возлагает некоторую ответственность на разработчика, который знает, как это сделать. но это может быть проще.

На месте вызова:

myUrlVar = config.onAddToken(myUrlVar);

И обратный звонок:

$("#input").tokenInput("/url/to/call", {
        noResultsText: "No results yet. Type some more...",
        searchingText: "Searching...",
        onAddToken: function(oUrl) {
            return "mynew/url";
        }
});

Или вы можете по умолчанию просто использовать значение, если из обратного вызова ничего не возвращено:

var newUrlVar = config.onAddToken(myUrlVar);
if(newUrlVar)
    myUrlVar = newUrlVar;

Если функция обратного вызова не имеет возврата, то ее значение должно быть нулевым.

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