【发布时间】:2017-04-17 20:04:50
【问题描述】:
我对我的代码发生的事情感到困惑。 当我在 Chrome 控制台中运行这个(下面的代码)代码 sn-p 时,它按设计成功运行。但是,当它在应用程序中运行时,它无法按设计运行。
这段代码sn-p的用意,是检查selectedItemIDSet数组的内容是否存在于TotalOfallIds数组的总数中。如果确实如此,那么它应该弹出一个Yes,否则返回一个No
var selectedItemIDSet = Session.get('selectedItemIDSet');
console.log (selectedItemIDSet);
上面的console.log()函数产生:
["GttzCQLzMeqj", "yzML7ZLvkWkjBBvq5", "2HwJhHyjDhDogJK"]
var TotalOfallIds = buyList.find().fetch().map(function(u) { return u._id; });
console.log (TotalOfallIds);
上面的console.log()函数产生:
EkebEek7KH8mdpNXg,LZJKA8S3wYNwHakzE,ikrbCDuttHrwkEcuv, yzML7ZLvkWkjBBvq5,e72HwJhHyjDhDogJK,GttzCQLzMeqjJP4Ae, XzGxS3LDtJ4DrXSdc,FJDhf7mzCxX4CKThe,TaTg6hf3Gok5NsWYp, NhDXRMnLWpwfAkWzJ,nG9TsoScYGFbEuerr,8CdapJoeSxSScHKFs, EsjSJfSgatrYTEnDK
var noOfloops = selectedItemIDSet.length;
var selectedItemId = this._id;
var allclicked;
for(var i = 0; i < noOfloops; i++ ) {
var clickedImg = selectedItemIDSet[i];
allclicked = TotalOfallIds.indexOf(clickedImg) > -1;
console.log("May: " +allclicked);
if (allclicked == 1 ) {
alert("Yes! " );
// return "selectedItem";
}
else {
alert("No! ");
//return "";
}}
以上在控制台中工作得很好,但是在我的 template.helper 中,for-loop 似乎无法循环(3 次)selectedItemIDSet 数组,但循环(13 次)通过所有 TotalOfallIds 属性,而且它似乎只检查GttzCQLzMeqj 属性与TotalOfallIds!
这对我来说没有任何意义!
在我的 template.helper 中找到我的代码。
'selectedItem' : function () {
var selectedItemIDSet = Session.get('selectedItemIDSet');
var TotalOfallIds = buyList.find().fetch().map(function(u) { return u._id; });
var loops = selectedItemIDSet.length;
var selectedItemId = this._id;
var allclicked = true;
for(var i = 0; i < loops; i++ ) {
alert("Checking..." + selectedItemIDSet[i]+ " in " +TotalOfallIds);
var clickedImg = selectedItemIDSet[i];
allclicked = TotalOfallIds.indexOf(clickedImg) > -1;
if (allclicked == 1 ) {
alert("Yeeeeiiiii! " );
return "selectedItem";
}
else {
alert("Nnoooooo! ");
return "";
}
}
},
对不起,冗长!
任何帮助将不胜感激。
【问题讨论】:
-
在帮助程序中,您是否检查了“this._id”以确保它符合您的预期?
-
@zim 谢谢,但我发现它与 this._id 无关。我只需要重组我的代码。我将在“回答您的问题”部分添加解决方案。
标签: javascript for-loop meteor