プリロードオプションが設定されている場合、jqueryプラグインのターゲットに応答データを添付しています。私が設定したデータにアクセスできないことを除けば、すべてが魅力的に機能しているようです。ログ$(elm).data();
に記録すると、オブジェクトが適切なキーに適切なデータセットで返されたことがわかります。しかし、私が試してみると、console.log($(elm).data('key'));
私は未定義になります。また、試してみると未定義になりvar elmData = $(elm).data(); console.dir(elmData.key);
ます。そのため、オブジェクトを1行でログに記録し、コンソールに表示して、存在を確認したばかりのプロパティにアクセスしようとして、を取得してundefined
います。
これが私の関数です:
this.preloadData = function(folders)
{
var getString;
for(var folder in folders ){
getString = 'folder='+folders[folder]+'&uri='+uri+'&thumbSide='+options.thumbSide;
$.get(options.handler, getString,
function(response, serverStat, xhr)
{
$self.data(folder, response);
});
}//for
var $selfData = $self.data();
console.log($selfData);//Object{ editorial : "data", testingdata : 'some meaningless words'}
console.log($self.data());//Object{ editorial : "data", testingdata : 'some meaningless words'}
console.log($self.data.editorial);//undefined
console.dir($self.data('editorial'));//undefined
console.log($selfData['editorial']);//undefined
console.log($selfData.editorial);//undefined
$self.data('testingdata', 'some meaningless words');
console.log($self.data());//Object{ editorial : "data", testingdata : 'some meaningless words'}
console.log($self.data('testingdata'));//'some meaningless words'
}
名前空間が単純すぎることはわかっています。これが機能しない理由を理解するために、できるだけ多くの要素を切り取ろうとしました。私はクロームで開発していますが、Firefoxでも試してみましたが、同じようになりました。
- - - - - - - - - - - - - - -編集 - - - - - - - - - - ----------------------
私は今何が問題なのか理解しています。コンソールは、オブジェクトがログに記録されたときに行われたかどうかに関係なく、行われたオブジェクトへのすべての変更を反映します。したがって、オブジェクトをログに記録したとき、応答がサーバーからまだ返されていなかったため、プロパティはまだ存在していませんでしたが、スクリプト実行の後のある時点でDIDが存在したため、ログにはプロパティが存在することが示されます。プリミティブ値は同じ方法でログに記録されないため、プロパティをログに記録するための呼び出しは、undefined
未定義であるために表示されます。数秒後にプロパティを参照する場合、クリックイベントでそれが定義されていると言います(とにかくそれが機能するように意図した方法です)。実際に実装する前に、この関数のデバッグに本当に夢中になりました。