设置预加载选项时,我将响应数据附加到 jquery 插件的目标。除了我设置的数据无法访问之外,这一切似乎都很有吸引力。当我登录时$(elm).data();
,我可以看到返回的对象带有适当的数据集到适当的键。但是当我尝试时,console.log($(elm).data('key'));
我变得不确定。当我尝试时,我也不确定var elmData = $(elm).data(); console.dir(elmData.key);
。所以我将对象记录在一行上,在控制台中看到它,尝试访问我刚刚确认存在的属性并获取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'
}
我知道命名空间太简单了,我只是试图尽可能多地删除因素来尝试理解为什么这不起作用。我正在用 chrome 开发,但我也在 Firefox 中尝试过它并得到相同的结果。
- - - - - - - - - - - - - - -编辑 - - - - - - - - - - ----------------------
我明白现在的问题是什么。控制台会反映对对象所做的所有更改,无论它们是否是在记录对象时进行的。因此,当我记录该对象时,该属性还不存在,因为响应尚未从服务器返回,但日志仍然显示该属性存在,因为在脚本执行的某个稍后时间点它确实存在。因为原始值的记录方式不同,所以记录属性的调用显示为undefined
因为它是未定义的。如果我在几秒钟后引用该属性,例如在单击事件上定义它(这就是我打算让它工作的方式)。在我真正实现它之前,我才真正开始调试这个功能。