Как привязать событие к 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">

Другие вопросы по тегам