Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 测试初始化函数中设置的主干事件_Javascript_Backbone.js_Jasmine - Fatal编程技术网

Javascript 测试初始化函数中设置的主干事件

Javascript 测试初始化函数中设置的主干事件,javascript,backbone.js,jasmine,Javascript,Backbone.js,Jasmine,我正在尝试设置我的收藏,以侦听在收藏中的模型上触发的事件,如下所示: var Collection = Backbone.Collection.extend({ initialize: function() { this.on('playback:completed', this.playNext); }, playNext : function() { } }); var Collection = Backbone.Collection.extend({ initia

我正在尝试设置我的收藏,以侦听在收藏中的模型上触发的事件,如下所示:

var Collection = Backbone.Collection.extend({
  initialize: function() {
    this.on('playback:completed', this.playNext);
  },
  playNext : function() { }
});
var Collection = Backbone.Collection.extend({
  initialize: function() {
    this.bindEvents();
  },
  bindEvents : function() {
    this.on('playback:completed', this.playNext);
  },
  playNext : function() { }
});
在我的测试中,我将新的主干.Models添加到集合的一个实例中,然后在它们上触发
回放:completed
。。。并且不调用
playNext
。如何正确设置此项

编辑:添加测试代码(使用Jasmine):


这里的问题是主干的
.on
将回调包装为克隆或类似的东西。由于spy是在Collection.initialize运行后设置的,因此包装的回调函数是设置spy之前的函数,它永远不会被触发

我确定的解决方案是将事件绑定拉入
bindEvents
函数,如下所示:

var Collection = Backbone.Collection.extend({
  initialize: function() {
    this.on('playback:completed', this.playNext);
  },
  playNext : function() { }
});
var Collection = Backbone.Collection.extend({
  initialize: function() {
    this.bindEvents();
  },
  bindEvents : function() {
    this.on('playback:completed', this.playNext);
  },
  playNext : function() { }
});

然后,在我的测试中(设置了间谍之后),我运行了
collection.off();collection.bindEvents(),它将它们与间谍版本重新绑定。

它应该可以工作:。问题来自其他方面。可能会发布更多的代码。非常奇怪——实际上没有更多的代码。我遗漏的唯一复杂之处是,这是一个Jasmine测试,playNext上有一个间谍。可能会添加触发事件的部分。奇怪的是,如果我在初始化函数之外编写事件侦听器(例如,
collection.on('playback:completed',collection.playNext'),这会起作用
在测试主体中。初始化函数有问题吗?不应该有问题。唯一可能有问题的是上下文。但我不知道上下文怎么可能不是初始化函数中的对象本身(Jasmine可能有问题?)。