Два взгляда на событие

Я был добавлен в базу кода Backbone, и одна из модификаций, которые мне нужно сделать, требует дублирования текстового элемента с typeahead. Вместо того, чтобы копировать и вставлять код, я хотел бы повторно использовать код события, но, поскольку я почти ничего не знаю о Backbone, я не уверен, как это сделать. Это должен быть помощник? Если да, куда мне поместить вспомогательный код, чтобы он мог использоваться обоими представлениями? Я бы не стал пытаться просматривать наследование, если это вообще возможно, потому что хотел бы, чтобы изменения были как можно более простыми и минимальными.

events: {
  // all other events removed for conciseness.
  'typeahead:selected #ud_producerid': 'producerChanged'
}

Мне нужно одно и то же событие с идентичной функциональностью в функции ManufacturerChanged, а также с кодом setupBindings, который связывает заголовок для работы в двух разных представлениях.

1 ответ

Я знаю, что вы сказали, что не хотите использовать наследование, но это легко в Backbone и хорошо подходит для этой задачи.

var TypeaheadBase = Backbone.View.extend({
    events: {
         'typeahead:selected #ud_producerid': 'producerChanged'
    },

    producerChanged: function(e) {
        ...
    },

    anotherBaseMethod: function() {
        ...
    }
});

var TypeaheadBaseA = TypeaheadBase.extend({
    someOtherAMethod: function() {
        ...
    },

    // You can do some extra functionality on `producerChanged`.
    // (Or you can override by not calling the Base prototype).
    producerChanged: function() {
        TypeaheadBase.prototype.producerChanged.apply(this, arguments);
        // Do some additional stuff.
    }
});

var TypeaheadBaseB = TypeaheadBase.extend({
    // You can also extend things like events, which could be a hash (Object).
    events: function() {
        var parentEvents = _.result(TypeaheadBase.prototype, 'events');
        return _.extend({}, parentEvents, {
            'click a': 'someClickEvent'
        });
    },

    someClickEvent: function() {
        ...
    }
});
Другие вопросы по тегам