Как привязать событие к Can.Control для запуска всякий раз, когда элемент, соответствующий селектору, добавляется к элементу управления?
Я пытаюсь создать виджет DateTimePicker и не хочу беспокоиться о создании экземпляра виджета, поэтому я создал Can.Control, который принимает тело html в качестве элемента.
Но теперь мои входные элементы отображаются в DOM с использованием can.view. Как привязать событие к вставке нового элемента dateTime в мою область управления?
/**
* DateTime Plugin
*/
plugins.DateTime = can.Control.extend({
},{
init : function ( element , options ){
},
'input.dateTime click' : function (){
$( this.element ).find('input.dateTime').datetimepicker();
}
});
$(function(){
new plugins.DateTime('body');
});
Можно ли как-нибудь указать 'input.dateTime load', чтобы привязать указатель даты при добавлении элемента к элементу управления?
1 ответ
Есть несколько способов сделать это, например, ваш рендеринг на основе can.view может выполнить обратный вызов после его завершения, так что вы можете сделать:
var that = this;
can.view(template, data, function() {
that.element.find("input.dateTime").datetimepicker();
}
Но это не совсем то, что я бы порекомендовал. Предыдущий пример не учитывает ни одного случая, когда одно из этих полей должно быть перерисовано из-за изменений данных после первой визуализации представления. Вместо этого создайте помощник как таковой:
Mustache.registerHelper("datetimepicker", function() {
return function(el) {
$(el).datetimepicker();
}
});
Тогда в вашем (Mu)Stache файле:
<input type="text" name="datetime_start" class="dateTime" {{datetimepicker}} can-value="datetime_start">