Backbonejs - 如何监听作为集合一部分的集合中的更改

时间:2015-12-26 21:06:54

标签: javascript backbone.js

我的应用程序由以下内容组成:

类别:

  • 座椅

型号:

  • 座椅
  • 座位表

SeatingChart有Sections作为属性

SectionsSection

的集合

SectionSeats作为属性

SeatsSeat

的集合

SeatingChart Seat SectionSeatingChart之一Sections的{​​{1}}是否可以在ManyRelatedManager内收听}?

1 个答案:

答案 0 :(得分:0)

我确信您知道Backbone确实提供了开箱即用的功能。所以我假设你想要了解如何将这个东西连接起来。接下来的解决方案将特定于您的设计。为了概括,我建议你看看Backbone Relational

您已经放置了解决方案的第一个组件,即保留对您正在跟踪的集合的引用。随着我们提升关系,这将派上用场。

但是让我们从底部开始吧。问题询问如何检测何时添加座位。所以让我们定义Seats集合:

var Seats = Backbone.Collection.extend({
  initialize: function () {
    this.setupListeners();
  },

  setupListeners: function () {
    this.on('add', _.partial(this.bubbleAction, 'add'));
    this.on('remove', _.partial(this.bubbleAction, 'remove'));
  },

  bubbleAction: function (action, model) {
    this.trigger('seats-action' action, model);
  }
})

现在Sections必须启动Seats操作并将其冒泡。

var Sections = Backbone.Collection.extend({
  initialize: function () {
    this.setupListeners();
  },

  setupListeners: function () {
    this.listenTo(this.seats, 'seats-action', this.bubbleSeatsAction);
  },

  bubbleSeatsAction: function (action, model) {
    this.trigger('section:seats-action', this.sectionClass, action, model);
  }
})

最后在你的SeatingChart集合中:

var SeatingChart = Backbone.Collection.extend({
  initialize: function () {
    this.setupListeners();
  },

  setupListeners: function () {
    this.listenTo(this.sections, 'section:seats-action', this.handleSeatAction);
  },

  handleSeatAction: function (section, action, model) {
    ///Logic goes here to handle a seat action///
})