2016-05-17 52 views
3

我想在jQuery中編寫我的第一個插件,並且我對回調有點困惑。插件中的回調函數

對我來說,似乎一切都很好,但它似乎不是。

邏輯是(我認爲)是創建一個全球settings對象。當實例化tokenizer設置將/改寫給定的設置/選項進行擴展,所以它應該是覆蓋onAdd這裏$('#xxx').tokenizer(...

之後,我只是add的項目,但在控制檯它傷心:

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