2016-07-09 10 views
0

私は自分のwebappに検索ボックスを使用しています。検索ボタンをクリックすると、ユーザーは「検索結果」ページに移動し、結果が表示されます。検索結果は失われます。どのようにセッションを使用してそれらを回復できますか? HTMLコードは次のとおりです。MeteorJS。ページを更新して検索結果が失われる

<div class="form-group"> 
     <input type="text" class="form-control" id='searchbox' placeholder="Search"> 
</div> 

jsのコードは次のとおりです。

Template.navigation.events({ 
    'submit form':function(event){ 
     event.preventDefault(); 
     var searchbox=document.getElementById('searchbox').value; 
     Router.go('/posts/search/'+searchbox); 
    } 
    }); 

    Template.searchresults.helpers({ 
     'post':function(){ 
      var searchbox=document.getElementById('searchbox').value; 
      var search=new RegExp('\\b'+searchbox+'\\b','i'); 
      return Posts.find({name:search}); 
     } 
    }); 

とrouterjsコードは次のとおりです。

Router.route('/posts/search/:somesearch/',{ 
    template:'searchresults', 
    name:'searchresults', 


}); 

答えて

0

代わりにヘルパー関数を使用しての、の中のデータコンテキストを設定してみましょうあなたのルート:

Router.route('/posts/search/:somesearch/',{ 
    template:'searchresults', 
    name:'searchresults', 
    data: function(){ 
    return Posts.find({ name: this.params.somesearch }); 
    } 
}); 

postテンプレートヘルパーを完全に削除します。あなたのHTMLテンプレートで

あなたは、ルータ内のdata関数によって返さカーソルなります{{#each this}}thisように反復する必要があります。

マルチワード検索や特殊文字の場合は、検索文字列をurl-encode/decodeする必要があります。

+0

私は変更を加えましたが、ページを更新しても内容は失われています。 –

+0

'#searchbox'はリロード時に読み込まれますか? –

+0

OPの主な問題は、ルートのパラメータではなくパラメータとして '#searchbox'の値を使用する' searchresults'テンプレートによるものです。したがって、アクションの後に検索ボックスを再設定することは、すでに遅すぎる可能性があります。 – ghybs

関連する問題