Подтвердить что ты не робот

Как выбрать между _init и _create в виджетах jQuery UI?

Думаю, я понимаю разницу между _create и _init в определениях виджетов (см., например, этот вопрос), но я все еще не уверен в цель разграничения. Какие задачи настройки входят в _create() или в _init()? Что не так, если автор виджета выбирает неправильный?

4b9b3361

Ответ 1

From:

Используйте _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() будет соответствовать вашим потребностям.