簡體   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