如何在jQuery UI小部件中决定_init和_create?

Luk*_*rer 28 javascript jquery jquery-ui jquery-plugins jquery-ui-plugins

我想我明白之间的差别_create,并_init在小部件定义(例如见这个问题),但我仍然不能确定的用途的区别.进入_create()或进入哪种设置任务_init()?如果小部件作者选择了错误的,会出现什么问题?

Dav*_*vis 36

从:

使用_create来构建和注射标记,绑定事件,地点等默认功能_init().例如,对话框小部件提供了一个autoOpen参数,表示在初始化小部件后是否应该打开对话框; 一个完美的地方 _init()!

也:

小部件工厂按顺序自动在初始化期间触发_create()_init()方法.乍一看,似乎重复努力,但两者之间存在视差.因为窗口小部件工厂可以防止同一元素上的多个实例化,所以 _create()每个窗口小部件实例最多会被调用一次,而_init()每次调用窗口小部件时都会调用它而不需要参数...

如果作者使用_init()的时候_create()应该已经编码,其结果将是,在代码_init()将每一次小部件实例执行.


Fra*_*ang 5

简短回答:_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();
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您使用jquery-ui插件绘制图表,在绘制之后,您希望使用新数据来更新它,您需要在_init()中执行此操作以更新图表.如果您只显示某些内容并且不会完全更新它们,_create()将满足您的需求.