繁体   English   中英

将事件传递给骨干中的集合

[英]Passing an event to a collection in backbone

我试图通过触发应用程序中其他位置的事件来触发集合上的行为。 我对骨干网还很陌生,所以可能我的语法都错了,但这似乎应该可行

小提琴

var Test = Backbone.Model.extend({
});
var Tests = Backbone.Collection.extend({
        model: Test,
        events: {
            "testEvent":"testResponce"
        },
        testResponce: function(){
            alert('hello world');
        }
    });



var myTest = new Test();

myTest.trigger('testEvent');

能做到吗? 我要去哪里错了?

您触发的事件必须在模型中捕获。

如果要捕获集合中的事件,可以使用Backbone.onBackbone.triggercollection.oncollection.trigger

请检查以下小提琴作为示例

小提琴

var Test = Backbone.Model.extend({});
var Tests = Backbone.Collection.extend({
    model: Test,
    initialize: function () {
        Backbone.on('testEvent', function () {
            alert('event handled in collection');
        });
    }
});


var myCollection = new Tests();
var myTest = new Test();

Backbone.trigger('testEvent');

UPDATE

集合具有一个初始化方法 ,可用于注册事件。 稍后,您可以从其实例触发这些事件。

NULL建议的另一种方法是像下面这样。

var Test = Backbone.Model.extend({});
var Tests = Backbone.Collection.extend({
    model: Test,
    initialize: function () {
        this.on('testEvent', function () {
            alert('event handled in collection');
        });
    }
});


var myCollection = new Tests();
var myTest = new Test();

myCollection.trigger('testEvent');

如果要使用testEvent事件调用集合的特定方法,则也可以采用此路径。 工作演示

var Test = Backbone.Model.extend({
    initialize: function() {
        this.on('testEvent', function() {
            console.log(this.collection);
            this.collection.testResponce();
        });
    }
});
var Tests = Backbone.Collection.extend({
        model: Test,
        testResponce: function(){
            alert('hello world');
        }
    });

var myTest = new Test();
var testList = new Tests([myTest]);
myTest.trigger('testEvent');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM