【问题标题】:Why does my for-loop work in the console, but not in my Helper?为什么我的 for 循环可以在控制台中工作,但不能在我的 Helper 中工作?
【发布时间】: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


【解决方案1】:

我通过将 if 条件代码从原来的 if (allclicked == 1 ) 更改为 if (selectedItemId.indexOf(clickedImg) != -1) 解决了这个问题。为什么它可以在控制台中工作但不能在代码中工作仍然没有任何意义。

所以...完整的工作 if 条件代码是:

if (selectedItemId.indexOf(clickedImg) != -1) {

                alert("Yes! " +clickedImg  );

                return "selectedItem";

    }


else {
//          alert("No! ");
     }

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2015-04-24
    • 2020-03-15
    相关资源
    最近更新 更多