0

我正在使用一个名为toggleEdit的 jQuery 插件进行内联编辑。

当代码在页面中实际使用时,一切正常。

但是,我的测试套件失败并出现以下错误:

TypeError: Cannot call method 'remove' of undefined

我追踪到它是从clear这个特定插件的方法中触发的。它的源文件可以在这里找到。

该代码中有两个相关位:

1-_init功能

self.element.addClass("toggleEdit toggleEdit-edit toggleEdit-edit-" +   
self._tag(self.element))
//store reference to preview element
.data("toggleEdit-preview", self.p);

如您所见,当插件第一次实例化时,它使用data结构self来存储新创建的元素。

2-clear功能

self.element.data("toggleEdit-preview").remove();

然后该clear函数尝试访问该结构并检索元素。那时,在 jasmine 规范中,它会因上述异常而失败。

有没有人见过类似的东西?

编辑:

这是我的规范,它是能够重现错误的最简单的代码:

it("should update the given attribute on the server", function(){
  $('#user-details input, #user-details select').toggleEdit(); //this line triggers the error
});

http://alz.so/static/plugins/toggleedit/jquery.toggleedit.js

4

2 回答 2

0

发现了我的问题:旧版本的 jQuery + jQuery UI duo。升级它们可以解决异常。

于 2011-12-06T12:43:32.587 回答
0

我正在查看 toggleEdit 的源代码,似乎只有在 self.element.data 设置之前调用了函数 clear 的 2 次:

if (typeof self.element.data("toggleEdit-preview") !== "undefined") {
     self.clear();
     self.disableEvents();
}

在销毁功能处:

destroy: function() {
         var self = this;
         self.clear();
         self.disableEvents();
         $.Widget.prototype.destroy.apply(self, arguments);
       }    

由于第一次调用似乎受到保护,所以我问你一个有点愚蠢的问题:是否可能会调用 destroy 两次?

于 2011-12-06T12:25:15.827 回答