1

我有以下(简单)CoffeeScript jQuery 插件:

$ = jQuery

$.fn.extend
    schoolSelect: (options) ->
        settings = 
            apiUrl: '/api/v1'
            debug: false

        settings = $.extend settings, options

        log  = (msg) ->
            console?.log msg if settings.debug

        return @each ->
            @.dropkick
                change: (val, label) ->
                    log val
                    log label

我在另一个 CoffeeScript 文件中这样称呼它:

$('.school_select').schoolSelect
        debug: true

但由于某种原因,我不断收到以下错误: Uncaught TypeError: Object #<HTMLSelectElement> has no method 'dropkick'

我正在DropKick为我的 HTML 选择使用 jQuery 插件:http: //jamielottering.github.com/DropKick/

如何在我的 CoffeeScript jQuery 插件中访问 DropKick 插件?

4

1 回答 1

2

这一行:

    return @each ->
        @.dropkick

需要是

    return @each ->
        $(@).dropkick

在每个 jQuery 回调的上下文中,this为您返回一个原始 DOM 元素(因此有关 HTMLSelectElement 的警告),而不是一个 jQuery 对象。

如果您的插件正在调用另一个插件,您需要确保在扩展 jQuery 之前完成 DropKick 插件的设置。

于 2012-08-14T15:22:53.723 回答