如何在jQuery UI小部件中决定_init和_create?
我想我理解了小部件定义中_create
和_init
之间的区别(例如参见这个问题 ),但我仍然不确定区分的目的 。 在_create()
或_init()
哪些设置任务? 如果小部件作者选择了错误的,会出现什么问题?
从:
- http://forum.jquery.com/topic/jquery-ui-1-8-use-of-init
- http://www.erichynds.com/jquery/tips-for-developing-jquery-ui-widgets/
- http://jqueryui.com/demos/dialog/
使用
_create
构建和注入标记,绑定事件等。在_init()
放置默认function。 例如,对话框小部件提供autoOpen
参数,表示在初始化小部件后是否应该打开对话框;_init()
的最佳位置!
也:
窗口小部件工厂在初始化期间按顺序自动触发
_create()
和_init()
方法。 乍一看似乎是重复的努力,但两者之间存在视差。 因为窗口小部件工厂可以防止同一元素上的多个实例化,所以每个窗口小部件实例最多会调用_create()
一次,而每次调用窗口小部件时都会调用_init()
而不需要参数…
如果作者在_create()
应该被编码时使用_init()
,结果将是每个小部件实例化时_init()
中的代码将被执行一次。
简短回答 :_create()将在你第一次运行你的jquery-ui插件时执行,比如$ xx.your-plugin(你的选项); _init()将在您的代码第一次运行到$ xx.your-plugin(您的选项) 之后首先执行;
因为jquery-ui.custom.js中有一些代码如下:
var instance = $.data( this, fullName ); if ( instance ) { instance.option( options || {} )._init(); }
因此,如果您使用jquery-ui插件绘制图表 ,在绘制完成后,您希望使用新数据进行更新 ,则需要在_init()中执行此操作以更新图表。 如果您只显示某些内容并且不会完全更新它们,_create()将满足您的需求。