Если вы хотите, чтобы эти методы были доступны для любого объекта jQuery, вам придется добавить каждый из них в прототип jQuery. Причина в том, что каждый раз, когда вы вызываете $(".list")
, создается новый новый объект, и любые методы, которые вы прикрепили к предыдущему такому объекту, будут потеряны.
Назначьте каждый метод прототипу jQuery следующим образом:
jQuery.fn.extend({
list: function() { .. },
findItem: function() { .. },
sort: function() { .. }
});
Метод list
здесь особенный, так как он может быть вызван в двух случаях. Во-первых, при инициализации списка, и во-вторых, при поиске определенных элементов по условию. Вам придется как-то различать эти два случая - либо по типу аргумента, либо по другому параметру.
Вы также можете использовать API data
, чтобы вызвать исключение, если эти методы вызываются для объекта, который не был инициализирован плагином списка. Когда ('xyz').list({ .. })
вызывается впервые, сохраните некоторую переменную состояния в кеше данных для этого объекта. Когда любой из других методов - «list», «findItem» или «sort» позднее вызывается, проверьте, содержит ли объект эту переменную состояния в своем кэше данных.
Лучшим подходом было бы пространство имен вашего плагина, чтобы list()
возвращал расширенный объект. Три расширенных метода могут быть вызваны на его возвращаемое значение. Интерфейс будет выглядеть так:
$('selector').list({ ... });
$('selector').list().findOne(..);
$('selector').list().findAll(..);
$('selector').list().sort();
Или сохранить ссылку на возвращаемый объект в первый раз и напрямую вызывать методы для него.
var myList = $('selector').list({ ... });
myList.findOne(..);
myList.findAll(..);
myList.sort();