Думаю, я понимаю разницу между _create и _init в определениях виджетов (см., например, этот вопрос), но я все еще не уверен в цель разграничения. Какие задачи настройки входят в _create() или в _init()? Что не так, если автор виджета выбирает неправильный?
Как выбрать между _init и _create в виджетах jQuery UI?
Ответ 1
From:
- 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(). Виджет диалогового окна, например, предоставляет параметрautoOpenчто диалог должен быть открыт после того, как виджет инициализируется; идеальное место для_init()!
также:
Виджет factory автоматически запускается методы
_create()и_init()во время инициализации, в указанном порядке. На первый взгляд кажется, что усилие дублируется, но есть разницу между ними. Поскольку виджет factory защищает против множественных экземпляров на тот же элемент,_create()будет называемые максимум один раз для каждого экземпляр виджета, тогда как_init()будет каждый раз, когда виджет без аргументов...
Если автор использует _init(), когда _create() должен быть закодирован, результатом будет то, что код в _init() будет выполняться один раз после создания экземпляра виджета.
Ответ 2
Короткий ответ здесь: _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 plugin, после ее вытягивания, то вы хотите использовать новые данные для обновления, вам нужно сделать это в _init(), чтобы обновить диаграмму. Если вы просто что-то отображаете и не будете их полностью обновлять, _create() будет соответствовать вашим потребностям.