0

嗨,我需要遍历此代码中的每个标题。但是,我在控制台中遇到一些错误,指出不能使用“in”运算符。当我传递来自数据库的 id 时,此代码工作正常。但是我需要传入一个字符串,然后在调用每个函数后立即引发错误。我不知道为什么,我能想到的一件事是可能存在 JSON/字符串冲突。我该如何解决。任何帮助将不胜感激。

   function getFilteredBySearch(searchString){      

              return priv.availablePrintables.filter(function(printableModel) {               
                var result = false;               
                var title = printableModel.getTitle();              
                  $.each(title, function(idx, id) {

                    if (id == searchString) {
                        result = true;
                        return false;   // break out of the 'each' loop
                    }                  
                })
                return result;  // return from the callback
            });
        }

解决:

以下工作!

  if ((printableModel.getTitle()).indexOf(searchString) > -1){
                result = true;
                console.log(result);
              }
4

2 回答 2

2

我认为您正在尝试迭代集合,而过滤器方法已经为您完成了该操作。当您只有一个要检查时,您不需要 jQuery 循环遍历多个项目。尝试这个:

function getFilteredBySearch(searchString){      

    return priv.availablePrintables.filter(function(printableModel) {               

      return (searchString == printableModel.getTitle());              
    });
}

(我对backbone.js不太熟悉,所以我的语法可能有点错误)

于 2013-06-13T01:16:16.383 回答
1

这仅基于假设:可能有时getTitle方法返回字符串,有时返回字符串数组(因为您已经指出["book"]当您获得标题时控制台会注销)。您可以检查它返回的对象类型:

function getFilteredBySearch(searchString){      

      return priv.availablePrintables.filter(function(printableModel) {                            
        var title = printableModel.getTitle();
            if(typeof title == 'string'){
                //if it's string
                return (title == searchString);
            }else{
                //if it's array
                return (title.indexOf(searchString) != -1);
            }
    });
}
于 2013-06-13T01:32:11.083 回答