2016-05-17 11 views
3

jQueryで最初のプラグインを作成しようとしていますが、コールバックと少し混乱しています。プラグインのコールバック関数

私にとっては、すべてがうまくいるようですが、それほどうそをつくことはありません。

ロジックは(私が想定したように)グローバルsettingsオブジェクトを作成することです。それはその後、ここonAdd$('#xxx').tokenizer(...

を上書きする必要がありますので、私はちょうどaddアイテムが、コンソールで、それは悲しい、tokenizer設定が拡張されます/与えられた設定/オプションで上書きインスタンス化する場合:

The item in onAdd 
undefined 
ここ

jsFiddle

var settings = { 
    onAdd: function() {}, 
    onRemove: function() {}, 
    sourceSelecter: null, 
    targetSelector: null 
}; 

$.fn.tokenizer = function (options) { 
    this.settings = $.extend({ 
     targetSelector: this, 
     idName: 'id' 
    }, settings, options); 

    this.add = function (item) { 
     console.log('The item in function add: ' + item); 
     this.settings.onAdd.call(item); 
    }; 

    this.remove = function (item) { 
     this.settings.onRemove.call(item); 
    }; 

    return this; 
}; 

var $tokenizer = $('#xxx').tokenizer({ 
    sourceSelector: 'group', 
    onAdd: function (item) { 
     console.log('The item in onAdd'); 
     console.log(item); 
    } 
}); 

$tokenizer.idName = 'groupId'; 
$tokenizer.add('abcdefg'); 

答えて

2

callがあるべきである: -

this.settings.onAdd.call(this, item); 

構文

fun.call(thisArg[, arg1[, arg2[, ...]]])

FIDDLE

+0

クール、それは動作します、ありがとうございました。私は十分な知覚を読み取っていませんでした。 SOタイマーで私が答えを受け入れることができるようになると、私はします。 – vaso123

+0

私は助けることができてうれしい。 – BenG