分享活动的两种观点

时间:2015-06-22 18:05:11

标签: backbone.js backbone-views backbone-events

我已被抛入Backbone代码库,我需要进行的修改之一需要使用typeahead复制文本元素。我不想复制和粘贴代码,而是想重新使用事件代码,但我几乎不了解Backbone,我不知道应该怎么做。它应该是帮助者吗?如果是这样,我在哪里放置帮助程序代码,以便两个视图都可以使用它?如果可能的话,我宁愿不尝试查看继承,因为我希望尽可能简单和最小化。

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

我需要在producerChanged函数中具有相同功能的相同事件以及将typeahead连接起来以在2个不同视图中工作的setupBindings代码。

1 个答案:

答案 0 :(得分:0)

我知道你说你不想在这里使用继承,但在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() {
        ...
    }
});