Как сделать выбор между _init и _create в виджете jQuery UI? - PullRequest
28 голосов
/ 31 декабря 2010

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

Ответы [ 2 ]

35 голосов
/ 03 января 2011

От:

Использование _create для создания и внедрения разметки, связывания событий и т. д. Поместите функциональность по умолчанию в _init().Например, диалоговый виджет предоставляет параметр autoOpen, указывающий, должен ли диалог открываться после инициализации виджета;идеальное место для _init()!

Также:

Фабрика виджетов автоматически запускает методы _create() и _init() во время инициализации, в указанном порядке.На первый взгляд кажется, что усилие дублируется, но между ними есть разница в виде.Поскольку фабрика виджетов защищает от нескольких экземпляров одного и того же элемента, _create() будет вызываться максимум один раз для каждого экземпляра виджета, тогда как _init() будет вызываться каждый раз, когда виджет вызывается без аргументов ...

Если автор использует _init(), когда _create() должен быть закодирован, в результате код в _init() будет выполняться один раз для каждого экземпляра виджета.

5 голосов
/ 16 мая 2013

Краткий ответ здесь: _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, после того, как он будет извлечен, вы захотите использовать новые данные для его обновления , вам необходимо сделать _init () чтобы обновить график. Если вы просто отображаете что-то и не обновляете их полностью, _create () удовлетворит ваши потребности.

...