【问题标题】:Can I trigger an event on a specific model in a collection in backbone?我可以在主干集合中的特定模型上触发事件吗?
【发布时间】:2013-08-22 20:10:27
【问题描述】:

假设我有以下结构 -

型号:文件夹

集合:文件夹

在我的集合视图中,我想在具有特定名称的文件夹上触发一个事件 -

所以,

FolderCollectionView = Backbone.View.extend({
    ...
    ...
    editFolder: function() {
        this.collection.findWhere({ name: "abcd" }).trigger("editThisFolder");
    }
});

FolderModelView = Backbone.View.extend({
   ...
   ...
   editThisFolder: function() {
       //This should get called
   }
});

这可能吗?我正在使用事件聚合器,但是,我还没有找到一种方法,可以在特定文件夹上触发事件,可以使文件夹视图订阅集合视图事件,但是所有文件夹视图都会响应该事件,我还没有找到只让特定文件夹视图响应集合事件的方法。或者以某种方式从集合视图中触发特定文件夹视图上的事件。

我是新手,所以如果我遗漏了重要的东西,请告诉我。

事件聚合器参考 - http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

【问题讨论】:

  • 是的,您使用自定义事件走在正确的道路上

标签: events backbone.js


【解决方案1】:

Backbone 有 underscore.js 作为依赖项。原因之一是 Backbone.js 集合实现了a whole lot of underscore methods。所以你的解决方案应该可以工作

this.collection.findWhere({ name: "abcd" }).trigger("editThisFolder");

那么你当然应该让你的FolderView 监听那个事件并调用函数

var FolderView = Backbone.View.extend({
  initialize: function() {
    // assuming a folder model assigned to each view
    this.listenTo(this.model, 'editThisFolder', this.editThisFolder);
  }
});

这是否回答了您的问题?

【讨论】:

  • 是的,确实如此。我试图让视图相互倾听,但没有意识到该事件会首先在模型上触发。谢谢你,拯救了这一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多