我正在使用名为toggleEdit的jQuery插件进行内联编辑。
当代码实际用于页面时,一切正常。
但是,我的测试套件失败并出现以下错误:
TypeError: Cannot call method 'remove' of undefined
我跟踪它是从这个特定插件的clear
方法中触发的。其源文件可以找到here。
该代码中有两个相关位:
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
函数尝试访问该结构并检索该元素。那时,在茉莉花规格内,它失败了上述例外。
有没有人见过类似的东西?
编辑:
这是我的规范,它是能够重现错误的最简单的代码:
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
答案 0 :(得分:0)
我正在查看toggleEdit的源代码,似乎只调用了函数clear的两次,就在self.element.data被设置之前:
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?
答案 1 :(得分:0)
发现我的问题:旧版jQuery + jQuery UI duo。升级它们可以解决异常。