Stickit динамическая привязка для вновь созданного элемента select

В моем проекте я использую Marionette с Stickit для двухстороннего связывания данных.

Там мне нужно клонировать элемент div, который имеет select и текстовое поле.

var $template = $('#template-clone');
var $clone = $template.clone();
$clone.show();

var observeSelectID = $clone.find('select').attr('id');
var selectID = '#'+observeSelectID; 

после этого я пытаюсь связать вновь созданный элемент с помощью Stickit.

this.addBinding(null, {
    selectID : {
        observe : observeSelectID,
        initialize : function($el) {
            $(selectID).select2({
            });
        },
    },
    selectOptions : {
        collection : function(data) {
            var option = "{Label value pair JSON String}"   
            return {
                'opt_labels' : ['List'],
                'List' : option
            };
        }
    }
}); 

Но любые изменения в окне выбора не будут вызывать изменения модели.

1 ответ

Решение

Получил решение: добавить обработчик для select2 stickit.

Backbone.Stickit.addHandler({
        selector : 'select.select2',
        initialize : function($el, model, opt) {
            var e = 'change:' + opt.observe,
                self = this;
            $el.select2();
            var up = function(m, v, o) {
                if (!o.stickitChange)
                    $el.trigger("change");
            };
            this.listenTo(model, e, up);
            this.listenTo(model, 'stickit:unstuck', function() {
                self.stopListening(model, e, up);
            });
        }
    });

и когда новый элемент создан, добавьте его привязки

            var textareaObserve = $('#textarea').attr('id');
            var textareaID = '#' + textareaObserve;

            self.bindings[selectedID] = observeSelectID;
            self.addBinding(self.model, selectedID, observeSelectID);

сделает привязки select2.

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