2014-02-02 5 views
0

Я хочу, чтобы метод цепочки работал, но, похоже, я не получаю некоторые понятия.Понимание метода цепочки в javascript

Это:

$(".list").activeJS() 

первым должен использовать JQuery, чтобы получить HTMLElement нодлист, а затем он должен вызвать функцию activeJS(), проходящей нодлист.

var activeJS = function(item){ 

    alert(item) //nodelist 


} 

Теперь я получаю TypeError:. $ (...) activeJS не является функцией ошибки в моей консоли.

Thx,

+2

[Вы должны сделать некоторые исследования.] (Http://learn.jquery.com/plugins/) – Pointy

ответ

1

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

jQuery.fn.activeJS = function(item) { 
    // ... whatever 
}; 
+0

Как бы это установить как ссылку на мою функцию и по-прежнему возвращать nodelist jquery, поэтому я могу предупредить нодлист , как в моем примере выше? – kevinius

+0

Функции плагина jQuery @kevinius следуют определенному соглашению. При вызове 'this' привязан к объекту jQuery, и функция плагина несет ответственность за возврат объекта jQuery, если он предназначен для использования в цепочке. Страница, которую я связал в комментарии по вашему вопросу, подробно освещена. – Pointy

+0

Привет, thx, я прочитал учебник, но некоторые из моих вопросов не получили ответа. Например, как я могу ссылаться на функцию вместо прямого назначения функции прототипу, но все еще передавая объект jQuery - jQuery.fn.activeJS = function (item) {activeJS (item)} – kevinius

1

Когда функция добавляется к JQuery (который позволяет цепочки), он называется плагином, и необходимо учитывать несколько вещей. Например, ваша функция сама цепляется? Будет ли ваша функция работать с одним элементом или несколькими? Я бы рекомендовал вам изучить плагины jQuery и создать вашу функцию в качестве плагина в jQuery.

Здесь excellent tutorial о создании плагина jQuery, который охватывает такие понятия, как объединение, передача свойств и вызов различных функций плагина. Взгляните на статью и определите, действительно ли ваша функция должна быть плагином.

Возможно, вам лучше просто передать jQuery и выбранные элементы в качестве аргументов вашей функции вместо цепочки.

+0

Я думаю, что более дружелюбно позволить людям инициализировать мой скрипт с использованием шаблона цепочки jquery. Вот почему я не просто передаю jQuery моему плагину. – kevinius

+0

@kevinius Нет проблем с этим, но когда вы принимаете это решение, есть другие предметы, которые нужно учитывать. –

1

Взгляните на этот пример:

var obj = { 
    fn: function(){ 
     console.log("fn method"); 
     return this; 
    }, 
    abc: function(){ 
     console.log("abc method"); 
     return this; 
    }, 
    oneMore: function(){ 
     console.log("one more method"); 
     return this; 
    } 
}; 

Здесь сцепление обеспечивается путем возврата ссылки на OBJ Object. Просто каждый раз, когда вы вызываете метод на этом объекте, вы возвращаете этот объект, и вы можете продолжать его методы. Это базовый шаблон цепочки, который вы можете найти в jQuery также - слегка измененный, но идея такая же. Благодаря динамической природе javascript мы можем делать такие вещи. Цепь позволяет связывать связанные методы, связанные общим объектом. Этот шаблон имеет свои корни в функциональном программировании, а на javascript сильно влияют функциональные языки (в основном схема). Но слишком много цепочки может привести к нечитаемому коду, как это видно из множества примеров jQuery.

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