Думаю, я понимаю разницу между _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() будет соответствовать вашим потребностям.