2012-02-02 12 views
1

私のウェブサイトにはvisualsearch.jsコントロールを使用したいと考えていますが、ドキュメントを読んでも、出力検索コレクションデータを効果的に取得する方法はまだ不明です。この例に基づいて、検索文字列のシリアライズによって出力文字列が作成されます。しかし、単一のシリアライズされた文字列を解析するのではなく、より多くの配列のような方法で検索コレクションにアクセスする方法があるかどうかは疑問でした(for/inループを使用できるようにする)。最終的には、検索コレクションデータからSQLクエリを作成する必要があります。visualsearch.jsの出力はどのように使用しますか?

さらに効率的または適切な検索コレクションデータへのアクセス方法がある場合は、お知らせください。

ありがとうございます!

+0

私は正常に私のアプリでvisualsearch.jsを使用し、私はまたそれを設定するいくつかのトラブルがあった。しかし、私はあなたの問題が何であるかを理解していません。ファセット出力を使ってコレクションをフィルタリングする方法を知らないのですか?あなたは例を挙げることができますか? –

+0

私がよく知っている唯一の出力はsearchCollection.serialize()メソッドですが、私の目的にはあまり役に立ちません。より多くの配列に似た方法でデータにアクセスできる方が適しています。私はJavaScriptにまったく新しいので、いくつかの基本を見逃しているかもしれません...あなたのコレクションをフィルタリングするために「ファセット出力」についてもっと詳しく説明できますか? – kaspnord

答えて

5

は、私の知る限りでは、あなたが言ったように、それはまた、直接usage #4

  1. で自分のドキュメントで説明されている視覚探索 からデータを取得するには2つの方法、検索の文字列化バージョンがあります。ループへ

    visualSearch.searchBox.value(); 
    
    // returns: 'country: "United States" state: "New York" account: 5-samuel title: "Pentagon Papers"' 
    
  2. またはファセットオブジェクトに入力された値あなたが見ることができるように、このオプションはあなたに配列を与える、上で濾過した面当たり、及び各資産について

    visualSearch.searchQuery.facets(); 
    
    // returns: [{"country":"United States"},{"state":"New York"},{"account":"5-samuel"},{"title":"Pentagon Papers"}] 
    

    オーバー。

+0

ありがとう - 私が探しているもの。 – kaspnord

3

mhmmm .. ok、答えはそれほど簡単ではありません。私は、あなたがtodo-list appにいくつかの変更を加えるだけで、バックボーン構造を使っていくつかの練習をすることをお勧めします。それは素晴らしい出発点です。したがって、コレクションのための素晴らしいbackbone.jsメソッドに慣れてください

基本的な考え方は次のとおりです。 visualsearchでは、「ファセット」のリスト、つまりキー/値オブジェクトの配列を取得できます。

var myFacets = visualSearch.searchQuery.facets(); 
//my facets is then something like [{"field1":"value1-a"},{"field2":"value2-c"}] 

この後、あなたはiterativrely _underscore LIBからhinerithed WONDERFUL filter方法であなたのコレクションをフィルタリングするmyFacets要素を使用することができます。

どうすればよいですか?あなたはここに

_.each(myFacets,function(facet){ 
       myCollection=myCollection.filter(function(item){ 
        return item.get(facet.get('category')) == facet.get('value'); 
        }); 
       }); 
      } 

は、あなただけの値は、あなたの条項に従って該当する返しBACKBONE.JSのフィルタ方法を、使用はlibアンダースコアで_.eachメソッドを使用することができます。したがって、単一のファセットごとにコレクションを一度フィルタリングします。これはjavascriptに伝えるようなものです。「このファセット(値)と一致するコレクションの要素だけを返してください。」そして、あなたが持っているすべてのファセットに対して繰り返します。

これが役に立ちます。

ああ、最後のものは、ちょっとアイデアを混乱させるだけです:-):Visualsearchはbackbone.js上に構築されています。また、searchQueryオブジェクトはバックボーンコレクションだけですので、メソッドとそのプロパティを使用できます。基本的なバックボーンコレクション。これが明確でない場合は、この行を再度読んでください。これは、今後の実装で重要なポイントになる可能性があるためです。:-)

lib/js/modelsフォルダ内のsearch_jquery.jsファイルを見ることをお勧めします。それは非常に面白いです...

+1

すばらしい説明 - ありがとう! – kaspnord

関連する問題