Плагин 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;
Если функция обратного вызова не имеет возврата, то ее значение должно быть нулевым.