1

有人能弄清楚为什么我的活动没有被收听吗?

如果我将事件和函数放在 ItemView 中,则触发器永远不会在视图控制器中被注意到

如果我将事件侦听器和相应的函数放在 CollectionView 中,触发器会在视图控制器中被注意到,这是快乐的日子,除了我无法访问单个模型。

ListingView.ListingItem = Marionette.ItemView.extend({
  tagName: "div",
  className: "grid-flex  mix-10-70-15 row-wrap itemDetail",
  template: "#listing-item",
  /*
    Using the code below in the ItemView gives me access to
    the current model, but the trigger isn't picked up in the controller
  */
  events: {
    "click":"editItemDetail"
  },
  editItemDetail: function() {
    console.log('You clicked');
    this.trigger("itemsListing:editCurrentItem", this.model);
  }
});

ListingView.ListingItems = Marionette.CollectionView.extend({
  tagName: "div",
  className: "listItemsWrapper",
  template: "#listing-items",
  itemView: ListingView.ListingItem,
  /*
    Putting the code below in the CollectionView
    gets acted on by the controller. I get the alert
    but I can't get access to the selected model
  */
  events: {
    "click":"editItemDetail"
  },
  editItemDetail: function() {
    console.log('You clicked');
    this.trigger("itemsListing:editCurrentItem", this.model);
  }
});

和控制器代码:

var listingView = new ListingView.ListingItems({
collection: listCollection
});

tillRollView.on("itemsListing:editCurrentItem", function(model) {
    alert('Gotcha baby!');
    console.log(model);
});

我想知道为什么控制器不喜欢我在 ItemView 中的触发器(我在我的应用程序的其他地方成功地做到了这一点)。我还想知道是否可以从我的 CollectionView 中获取模型。无论哪种方式都会让我的应用程序正常工作,在此先感谢。

4

1 回答 1

4

ItemView我认为当一个事件从一个内部触发时CollectionView,它会以 . 为前缀itemview:

在您的情况下,这将给出:

tillRollView.on("itemview:itemsListing:editCurrentItem", function(model) {
    alert('Gotcha baby!');
    console.log(model);
});

来自 Marionette官方文档

当集合视图中的项目视图触发事件时,该事件将通过父集合视图冒泡,并在事件名称前添加“itemview:”。

于 2013-11-12T12:05:22.053 回答