0

こんにちは、このコードの各タイトルを反復処理する必要があります。ただし、「in」演算子を使用できないというエラーがコンソールに表示されます。データベースからのIDを渡すと、このコードは正常に機能します。しかし、文字列を渡す必要があると、各関数が呼び出された直後にエラーがスローされます。理由がわかりません。考えられることの 1 つは、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

filter メソッドが既にそれを行っているときに、コレクションを反復処理しようとしていると思います。調べる項目が 1 つしかない場合、多数の項目をループするために 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 に答える