0

设置预加载选项时,我将响应数据附加到 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因为它是未定义的。如果我在几秒钟后引用该属性,例如在单击事件上定义它(这就是我打算让它工作的方式)。在我真正实现它之前,我才真正开始调试这个功能。

4

2 回答 2

0

你能做这个吗?

$self.data['editorial']

于 2012-07-27T21:09:33.713 回答
0

尝试

console.log($self.data.editorial);
于 2012-07-27T21:09:33.963 回答