0

インライン編集にtoggleEditというjQueryプラグインを使用しています。

コードが実際にページで使用されている場合は、すべて正常に機能します。

ただし、私のテストスイートは次のエラーで失敗します。

TypeError: Cannot call method 'remove' of undefined

clearこの特定のプラグインのメソッド内からトリガーされるように追跡しました。そのソースファイルはここにあります。

そのコードには2つの関連するビットがあります。

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

4

2 に答える 2

0

私はtoggleEditのソースを調べていましたが、関数clearが呼び出されるのはself.element.dataが設定される直前の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が2回呼び出されている可能性はありますか?

于 2011-12-06T12:25:15.827 に答える
0

私の問題を見つけました:古いバージョンのjQuery +jQueryUIデュオ。それらをアップグレードすると、例外が解決されます。

于 2011-12-06T12:43:32.587 に答える