Javascript 如何扩展现有的jQueryUI小部件?
我正在使用jQueryV1.8.3和jQueryUIV1.9.2。我想通过添加和覆盖一些选项和方法来扩展现有的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
注意:我在网上搜索了(,…),发现文档大多与创建新的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版或更高版本中),因为它不是基于早期版本中的小部件工厂。看这个问题。对于其他小部件,扩展应该可以正常工作。