Вы должны вызвать
methods.bundUi.apply(this);
в вашем методе init
.
Если вы только выполните methods.bindUi()
, то this
внутри bindUi
будет относиться к methods
объект.
Обновление:
О, я только что видел это.Вы звоните methods.bindUi()
внутри each
.Тогда this
будет ссылаться на текущий элемент DOM .Итак, вопрос в том, на что вы хотите сослаться внутри bindUi
?Все выбранные элементы или только текущий элемент из цикла?
Вот два варианта:
A: Все элементы
init : function( options ) {
this.each(function() {
var settings = {
//none yet
};
if ( options ) {
$.extend( settings, options );
}
methods.log('init'); // <- this might be also better outside the loop
});
//attach events
methods.bindUi.apply(this); // <- called outside the each loop
return this;
}
(не нужно менять bindUi
)
B: один элемент .this
внутри цикла each
в init
будет ссылаться на текущий элемент DOM .Мы имеем дело только с одним элементом, поэтому нам не нужно использовать each
в методе bindUi
.(все еще используйте methods.bindUi.apply(this)
в init
(но внутри цикла, как у вас уже есть)).Но вы больше не можете звонить bindUi
извне (то есть вы не можете звонить .locationSearch('bindUi')
).
bindUi : function() {
// don't need `each`, as `this` will refer to only one element.
methods.log('bindUi');
$(this).click(function() {
methods.log('clicked');
});
},
Третье решение - просто изменить this
на $(this)
внутри функции bindUi
.Это определенно будет работать, но имеет два «заблуждения»:
- Если функция вызывается через
.locationSearch('bindUi')
, тогда this
уже будет объектом jQuery и вызов $(this)
является избыточным. - Если вы вызываете функцию из цикла
each
в init
, то this
будет ссылаться на один элемент DOM .Поэтому вызов $(this)
необходим, но использование each
для циклического перебора одного элемента бессмысленно.
Я также немного сбит с толку, если каждый из моих методов должен использовать return this.each(function() { ..
или если его используют только методы init
и destroy
?
Каждый метод, который должен вызываться через .locationSearch(method)
, должен return this
.