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

时间:2010-12-30 21:17:12

标签: javascript jquery jquery-ui jquery-plugins jquery-ui-plugins

我想我理解了小部件定义中_create_init之间的区别(例如参见this question),但我仍然不确定目的为了区别。 _create()_init()中有哪些设置任务?如果小部件作者选择了错误的,会出现什么问题?

2 个答案:

答案 0 :(得分:35)

自:

  

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

此外:

  

小部件工厂自动触发   _create()_init()方法   在初始化期间,按此顺序。   乍一看似乎是   努力是重复的,但有一个   两者之间的视力差异。   因为widget工厂可以保护   反对的多个实例   相同的元素,_create()将是   每个人最多召唤一次   小部件实例,而_init()将   每次小部件都被调用   没有参数呼叫......

如果作者在编码_init()时使用_create(),则结果将是每个小部件实例化时_init()中的代码执行一次。

答案 1 :(得分:5)

简短回答此处: 当你第一次运行你的jquery-ui插件时会执行_create(),比如$ xx.your-plugin(你的选项); 当你的代码运行到$ xx.your-plugin(你的选项)时,_init()将首先执行并在第一次之后执行;

因为jquery-ui.custom.js中有一些代码如下:

var instance = $.data( this, fullName );
if ( instance ) {
    instance.option( options || {} )._init();
}

所以,如果你用jquery-ui插件绘制图表,在它被抽出后,你想使用新数据来更新它,你需要做什么这在_init()中更新你的图表。 如果您只显示某些内容并且不会完全更新它们,_create()将满足您的需求。