2011-12-06 7 views
0

インライン編集にはtoggleEditというjQueryプラグインを使用しています。ウィジェット・ファクトリを使用して構築されたjQueryプラグインを使用するジャスミン仕様を実行するとエラーが発生します

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

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

TypeError: Cannot call method 'remove' of undefined

私は、この特定のプラグインのclearメソッド内からトリガされることを突き止め。そのソースファイルはhereです。

そのコードに2つの関連ビットがあります:あなたが見ることができるようにプラグインが最初にそれを保存するためにselfdata構造を使用してインスタンス化されるとき

1-、_init機能

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

新しく作成された要素。

2- clear機能

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

clear関数は、その構造にアクセスし、要素を取得しよう。ジャスミン仕様の中では、前述の例外が発生して失敗します。

誰も似たような人はいますか?

EDIT:これは私のスペックである

、それがエラーを再現することができ、コードの最も簡単な部分です:

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

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

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); 
     }  

を、私はあなたに多少ばかな質問をする:それは破壊することは可能である二回呼び出されていますか?

+0

私のテストでは2回呼び出されていません。そして、それが私のバグです。 Destroyは、ウィジェットのファクトリプロトコルに続いてjQueryによって呼び出されますが、呼び出されるときには別の 'this'を参照しているようです。 – leonardoborges

関連する問題