我已经尝试了一段时间了,但却无法让它发挥作用。
我正在创建一个对象:
(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甚至懒得显示错误或控制台......
问题:
如何访问sitemap对象的第二个参数对象的参数......?
感谢您的帮助!
答案 0 :(得分:1)
正如评论中所述,您应该从=
循环中的比较中删除等号for
:
for (var i = 0; i < j; i++) {
...
}
否则你的循环超出范围。
答案 1 :(得分:0)
使用self不是一个好主意,因为它增加了窗口。以下是您要实现的目标示例。
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.
}