1

我已经尝试了一段时间,但无法让它工作。

我正在创建一个对象:

(function( $, window) { 

    $.widget("mobile.multiview",$.mobile.widget, {

        options: {  
            siteMap: []
            }
        });
 }) (jQuery,this);

并用一个字符串和一个事件数据对象填充它,如下所示:

var _mainEventBindings = function () {
    var self = this;

    $(document).on("some-event", function(e, data) {
       self.options.siteMap.push( { type: "external", data: data } );
       });
 }

这工作正常。我现在必须在循环中检查存储的事件 data.toPage 属性,以查看存储在那里的字符串是否与当前字符串匹配,因此我不会添加两次内容。

但是我不能让它像这样工作:

var j = self.options.siteMap.length;
if (j == 0 ){
    alert("added entry");
    self.options.siteMap.push( { type: "external", data: data } );
    } else {
        for ( i = 0; i <= j; i++) {
            console.log("run "+i);
            console.log( self.options.siteMap);
            console.log( self.options.siteMap[i]);
            if ( data.toPage != self.options.siteMap[i]['data.toPage'] ){
                self.options.siteMap.push( { type: "external", data: data } );
                }
            }
        }

所以基本上我想确保我的对象中只有“唯一”记录。但是,上面的方法不起作用,因为我似乎无法访问存储在对象中的内容,就像我正在做的那样。Firebug 甚至懒得显示错误或控制台...

问题
如何访问站点地图对象的第二个参数对象的参数...?

感谢帮助!

4

2 回答 2

1

正如评论中所述,您应该从循环=中的比较中删除等号:for

for (var i = 0; i < j; i++) {
   ...
}

因为否则你的循环会超出范围。

于 2012-05-24T09:20:23.200 回答
0

使用 self 不是一个好主意,因为它会添加到 window. 这是您要实现的目标的示例。

var s = {},  //create an empty object
    i, siteMap;
s.options = {};
s.options.siteMap = []; //our array

//let's add some data to siteMap array
s.options.siteMap = [{'type': "external0", 'data': 'data0'}, {'type': "external1", 'data': 'data1'}, {'type': "external2", 'data': 'data2'}];

//get the siteMap's properties' property
siteMap = s.options.siteMap;
for (i in siteMap) {
  console.log(siteMap[i].type);  //will print external0, external1 etc.
}
于 2012-05-24T09:17:21.140 回答