1

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

小提琴

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');

这可以做到吗?我哪里错了?

4

2 回答 2

1

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

如果您想在集合中捕获事件,您可以使用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');

更新

Collection 有一个初始化方法,您可以使用它来注册事件。稍后您可以从它们的实例中触发这些事件。

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');
于 2013-05-13T08:50:03.930 回答
1

如果您想使用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');
于 2013-05-13T11:49:04.557 回答