Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何扩展现有的jQueryUI小部件?_Javascript_Jquery_Jquery Ui_Plugins_Extending - Fatal编程技术网

Javascript 如何扩展现有的jQueryUI小部件?

Javascript 如何扩展现有的jQueryUI小部件?,javascript,jquery,jquery-ui,plugins,extending,Javascript,Jquery,Jquery Ui,Plugins,Extending,我正在使用jQueryV1.8.3和jQueryUIV1.9.2。我想通过添加和覆盖一些选项和方法来扩展现有的jQueryUI小部件(在我的例子中是小部件),但保留官方版本中的其他功能。我怎样才能使之成为“适当”(也许是“标准”)的方式 注意:我在网上搜索了(,…),发现文档大多与创建新的jQuery UI小部件有关,但与扩展现有小部件无关。在jQuery UI 1.9+中,扩展小部件的方式与创建新小部件的方式相同。小部件工厂($.widget())支持几种方案: 使用基本小部件($.widg

我正在使用jQueryV1.8.3和jQueryUIV1.9.2。我想通过添加和覆盖一些选项和方法来扩展现有的jQueryUI小部件(在我的例子中是小部件),但保留官方版本中的其他功能。我怎样才能使之成为“适当”(也许是“标准”)的方式



注意:我在网上搜索了(,…),发现文档大多与创建新的jQuery UI小部件有关,但与扩展现有小部件无关。

在jQuery UI 1.9+中,扩展小部件的方式与创建新小部件的方式相同。小部件工厂(
$.widget()
)支持几种方案:

使用基本小部件(
$.widget
)作为起点创建新的小部件:

$.widget(“ns.widget”,{…})

创建从现有小部件继承的新小部件:

$.widget(“ns.widget”,$.ns.existingWidget,{…})

扩展小部件:

$.widget(“ns.widget”,$.ns.widget,{…})

您会注意到扩展语法和继承语法是相同的。widget工厂非常聪明,可以注意到您正在创建的widget和您从中继承的widget是相同的,并对其进行适当的处理

继承或扩展小部件时,只需定义要更改或添加的内容。基本小部件上还存在一些新方法,可以更轻松地处理继承和更改上下文的方法。有关方法及其说明的完整列表,请阅读。如果您正在扩展一个小部件,您肯定会想了解它

以下示例将默认的
delay
选项更改为
500
,并添加一个新选项
prefix
,该选项将添加到所有建议中:

$.widget( "ui.autocomplete", $.ui.autocomplete, {
    options: {
        delay: 500,
        prefix: ""
    },

    _renderItem: function( ul, item ) {
        var label = item.label;
        if ( this.options.prefix ) {
            label = this.options.prefix + " " + label;
        }
        return $( "<li>" )
            .append( $( "<a>" ).text( label ) )
            .appendTo( ul );
    },
});
$.widget(“ui.autocomplete”,$.ui.autocomplete{
选项:{
延误:500,
前缀:“
},
_renderItem:功能(ul,项目){
var标签=item.label;
如果(this.options.prefix){
标签=this.options.prefix+“”+标签;
}
返回$(“
  • ”) .append($(“”).文本(标签)) .附录(ul); }, });
  • 定义“扩展”。根据您希望执行的操作,您通常只需添加新方法,然后覆盖一些现有方法以利用添加的功能。就像在电影里一样。没有太多干净的、经得起未来考验的方法。我认为任何人都能提供的唯一答案是你必须谨慎行事。您必须熟悉代码库,然后确保维护函数之间的任何契约。@Fabricio Matté-你说的“没有多少干净且经得起未来考验的方法”是什么意思?@Thatidotguy-简单地说,我只想添加新方法和选项,但我不打算覆盖现有方法。嗯,毕竟你正在编辑一个插件功能。你无法预见在未来的版本中会发生什么变化。您可以在覆盖原始方法之前创建一个引用,使用自己的代码覆盖它,并在添加代码之前/之后调用原始方法,这是最接近干净/未来证明的方式,但不是100%。扩展和继承之间有什么区别?继承创建一个新的小部件,不更改现有小部件。扩展一个小部件会改变现有小部件的行为,而不是创建一个新的小部件。如果它能在我刚刚经历的相同时间/头痛的事情中节省任何人,请注意,您不能扩展jQuery UI的datepicker(在1.10版或更高版本中),因为它不是基于早期版本中的小部件工厂。看这个问题。对于其他小部件,扩展应该可以正常工作。