如何通过传递参数和覆盖我自己的回调来自定义jquery小部件?

时间:2012-06-01 06:24:11

标签: jquery jquery-ui callback jquery-callback jquery-widgets

我对jquery很新,最近根据我的需要定制了jquery combobox。但是,我需要在我的网站上的其他位置重用此组件。我基本上需要传入一些参数和一个回调函数,应该调用它来处理jquery中的某些事件。我正在努力学习语法并试图找到jquery-way of things:

为了给您提供示例,以下是source的{​​{1}}:

(创建了一个工作jsfiddle供参考)

combobox -> input -> autocomplete -> source

此处source: function( request, response ) { // implements retrieving and filtering data from the select var term = request.term; var prefixLength = 2; if (term.length >= prefixLength) { var abbreviation = term.substring(0, prefixLength); if(!(abbreviation.toLowerCase() in cache)){ cache[abbreviation.toLowerCase()] = 1; $.ajax({ url: "/wah/destinationsJson.action", dataType: "json", data: { term: abbreviation }, type: "GET", success: function(data) { if(!data || !data.cities || !data.cities.length){ // response(["No matches for " + term]); return; } updateOptions(select, data.cities); response(filterOptionsForResponse(select, term)); return; } }); } } response(filterOptionsForResponse(select, term)); } updateOptions(...)是简单的javascript函数。

为了重用,我需要为我创建的每个组合框实例指定一个回调来处理filterOptionsForResponse(select, term)

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:6)

唯一有用的小工具工厂文档位于wiki和that says

  

<强>属性:
  [...]
  的 this.options
  当前用于插件配置的选项。在实例化时,用户提供的任何选项都将自动与任何默认值合并

因此,如果您需要为source提供回调函数,那么您可以这样说:

$("#searchbox").combobox({
    source: function(request, response) { /* ... */ }
});

然后在插件中,查看this.options.source

$.widget("ui.combobox", {
    options: {
        // Default options go here...
    },
    _create: function() {
        //...
        input = $("<input>").appendTo(wrapper).val(value).addClass("ui-state-default").autocomplete({
            source: this.options.source,
            //...

您不必包含默认选项,但这样做几乎总是有意义的(即使您只是将其用于文档目的)。