Javascript 使用主干木偶时控制器中未接收事件
我有一个页面上显示的赠款集合。当我输入一个框时,它会过滤列表。 文本输入在木偶项视图上触发一个事件,该事件使用已过滤的向下集合调用控制器:Javascript 使用主干木偶时控制器中未接收事件,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我有一个页面上显示的赠款集合。当我输入一个框时,它会过滤列表。 文本输入在木偶项视图上触发一个事件,该事件使用已过滤的向下集合调用控制器: keywordFilter: function (ev) { var keyword = ev.currentTarget.value; var controller = sff.app.router.controller; var collection = sff.app.grantList; var filtered =
keywordFilter: function (ev) {
var keyword = ev.currentTarget.value;
var controller = sff.app.router.controller;
var collection = sff.app.grantList;
var filtered = collection.filterByKeyword(keyword);
controller._showGrants(filtered, 1);
}
这很好,但是我获取控制器和集合的引用的方式看起来不太好,而且应该使用事件更好,所以我尝试了以下方法:
在itemView中:
keywordFilter: function (ev) {
var keyword = ev.currentTarget.value;
this.trigger('grants:filter', keyword);
}
在控制器中:
var GrantController = Marionette.Controller.extend({
initialize: function (options) {
this.viewClass = options.viewClass;
this.app = options.app;
this.collection = options.collection;
this.on("grants:filter", function(keyword) {
console.log(keyword);
var filtered = this.collection.filterByKeyword(keyword);
this._showGrants(filtered, 1);
});
},
...more methods...
}
不幸的是,它没有收到该事件。我还尝试了this.app.on()和this.viewClass.on(),以及this.on(“itemView:grants:filter”),但仍然不起作用
如下所述,控制器没有对itemView的引用,反之亦然。我想可能我想执行app.vent.trigger('grants:filter'),但如何从itemView获取对app的引用
我开始讨厌主干网和提线木偶,事实上我宁愿吃jquery意大利面也不要这种胡说八道。如果你不能得到它的引用。你可以在其他对象上触发事件,例如主干网,然后在控制器中听它
keywordFilter: function (ev) {
var keyword = ev.currentTarget.value;
Backbone.trigger('grants:filter', keyword);
}
var GrantController = Marionette.Controller.extend({
initialize: function (options) {
Backbone.on("grants:filter", function(keyword) {
});
},
...more methods...
}嗯,您正在ItemView上触发一个事件,并在控制器上侦听一个事件。这确实不起作用。我想您在控制器中的某个位置有一个对视图的引用,请将其用作事件侦听器的目标。还可以尝试在事件绑定上使用
而不是e控制器您可以执行类似以下操作:this.listenTo(viewReference,'grants:filter',function());
问题是,控制器与不同的视图关联,因此我没有对它的引用。在这种情况下,我建议使用wreqr
来引发和接收事件。请参阅: