2010-04-21 5 views
0

Я выкопал руководство и попробовал экстенсивно отказаться от дополнительного вызова function(){...} после error и success, чтобы сделать это как mootools, но не удачи.jQuery callbacks - короткая версия

Есть ли способ, которым я могу избежать дополнительных function в jQuery?

function doFileDelete(ui) { 
    $.ajax({ 
     error: function() { doFileDeleteAnimation(ui, false) }, 
     success: function() { doFileDeleteAnimation(ui, true) }, 
     url: '/url-to-delete-file' 
    }); 
} 

Спасибо!

+1

Что случилось с тем, что у вас там есть? Мне кажется, что это довольно идиоматический javascript. –

ответ

1

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

Подробнее о jQuery documentation относительно обратных вызовов.

+0

Спасибо, Джейсон! Я вникнул в API и пропустил все инструкции. Я нахожу руководство jQuery, до сих пор немного реже, чем мук. Тем не менее, спасибо за большой совет. – Frankie

+0

это на самом деле довольно хорошо. проверьте это: http://www.futurecolors.ru/jquery/ – Jason

+0

Очень полезно! Уже напечатано и сидит над моим экраном! Большое спасибо! – Frankie

1

Вы также можете устранить эту внешнюю функцию, используя Function.prototype.bind (либо версию библиотеки Prototype, либо родную версию ECMAScript 5, если ваш браузер поддерживает ее). Например:

function handler(myBoolean) { 
    console.log(myBoolean); // will output true 
} 

$(function() { 
    $('#test').click(handler.bind(this, true)); 
}); 

Первый аргумент bind контекст вы хотите, чтобы выполнить функцию внутри. Последующие параметры передаются в функцию handler. Когда jQuery выполняет handler в качестве обратного вызова, вызовы функций отображаются в процентах, а передаваемые параметры будут привязаны к тем, которые вы указали в своем вызове bind. Таким образом, в моем примере handler получит три параметра, когда вы нажмете на #test: логический объект, который вы передали, объект события и элемент DOM, который был нажат.

jQuery имеет приблизительный эквивалент bind с его функцией $.proxy. По умолчанию он не позволяет выполнять функции, такие как bind, но кто-то wrote an extension to it, который даст ему эту функциональность.

По моему мнению, bind - лучший выбор, чем $.proxy, поскольку он имеет более чистый синтаксис, не требует от вас патча jQuery для обезьян и будет поддерживаться браузерами, как только ECMAScript 5 будет полностью реализован.

+0

Спасибо! Это, безусловно, будет хорошим обходным решением для некоторых из более сложных частей программы, которые мне придется уделить последнему! – Frankie

Смежные вопросы