我正在尝试在javascript中编写一个迭代大约10个函数的函数。
我有一个函数可以创建服务来将json url调用到我的函数中。这与下面的main函数进行通信,该函数使用相应url的选项调用服务函数,以用作启动json请求的数据。请参阅下文;
var landp = {
getCountryCode : function(){
console.info('landp.GetCountryCode');
return window.location.pathname.match(/\/([a-zA-Z]{2})/)[1].toLowerCase();
},
Service : {
getBaseUrl : function(){
console.info('landp.Service.GetBaseUrl');
return sprintf("/%s/service", landp.getCountryCode())
},
callService : function(method, options){
console.info('landp.Service.CallService');
var url = sprintf("%s/%s", landp.Service.getBaseUrl(), method);
$.ajax({
url : url,
method : 'GET',
success : options.success,
error : options.error
})
},
getCategories : function(options){
landp.Service.callService('category', options);
},
getCategoryId : function(options){
landp.Service.callService('category/id/13', options);
},
getCategoryTopTen : function(options){
landp.Service.callService('category/name/top-ten', options);
},
getSeeMoreItems : function(options){
landp.Service.callService('see-more', options);
},
getPartnerOffers : function(options){
landp.Service.callService('partner-offers', options);
}
}
}
这样可以正常工作,因为你可以看到getCategoryTopTen会调用一个url来保存我需要用来获取正确项目的json数据,例如item.name,item.description等等。这个代码如下:< / p>
landp.Service.getCategoryTopTen({
success : function(data){
$('#header').after('<div id="cat-sub-options"></div>');
$('#cat-sub-options').after('<div class="flexslider"><ul class="slides"></ul></div><div id="carousel-button" class="click"></div>');
$.each(data[0].items, function(i, item){
$('.flexslider .slides').append('<li class=""><h5>' + i + '</h5><a href="' + item.url + '"><img src="' + item.imageLargeUrl + '" alt="' + item.name + ' image" /><span>' + item.name + '</span></a></li>');
});
},
error : function(){
console.log("Error getting categories");
}
})
正如您所看到的,代码在上面工作,它将正确的信息提取到正确的元素等。目前大约有10个类别,如;
getCategoryTopTen getCategoryHistoryHeritage getCategoryWheretogo getCategoryShopping getCategorySportyPeople
正如您所看到的,每个人都将被分配到json文件中的类别URL。
我想要解决的是如何对所有类别进行上述操作,例如我们所拥有的:landp.Service.getCategoryTopTen,使用下面的代码,而不是在每个类别上写出它,我可以将变量传递给每个类别另外,我必须在每个类别上执行每个json调用。
非常感谢任何帮助。
谢谢, 标记
答案 0 :(得分:0)
我不确定我完全理解这个问题是什么,但是你可能会因使用[]符号来访问JavaScript孩子而受益匪浅。例如,而不是打电话
landp.Service.getCategoryTopTen()
您可以致电landp.Service["getCategoryTopTen"]()
,然后这可以退出,以便您有类似的内容:
var category="TopTen"
var method="getCategory"+category
land.Service[method](...)
然后你可以围绕它进行迭代或自动化。
答案 1 :(得分:0)
您可以循环遍历方法名称数组,并每次使用相同的回调函数调用它们。可以使用括号表示法来完成此功能:
landp.Service[methodname](function(){…});
但是,我强烈建议不要为系统中的每个类别定义额外的方法,只需将类别名称作为函数的参数:
…
getCategoryById: function(id, options){
landp.Service.callService('category/id/'+id, options);
},
getCategoryByName: function(name, options){
landp.Service.callService('category/name/'+name, options);
},
…
现在,数组上的循环更方便:
var cats = ["top-ten", "HistoryHeritage", "Wheretogo", "Shopping", "SportyPeople"];
for (var i=0; i<cats.length; i++) {
var catname = cats[i];
landp.Service.getCategoryByName(catname, {…});
}
顺便说一句,你需要从你的元素中删除id,因为你会多次创建它们 - 但是id必须是唯一的。