2013-01-10 1 views
7

メテオが新しくなりました。私は簡単なテストを構築し、非常に簡単な部分に立ち往生した。私のWebページのコンテンツはdbが変更されたときにのみ更新されますが、結果を返す関数が変更されたときにどのように更新する必要がありますか?ここに私のアプリケーションのコードの一部です:メテオテンプレート更新

client.js:

Meteor.subscribe("tasks"); 

var search_query = ""; 

Template.page.tasks = function() { 
    return Tasks.find({title: {$regex: search_query}}); 
}; 

Template.task.events({ 
    'click .checkmark': function() { 
     Tasks.update({_id: this._id}, {$set: {done: !this.done}}); 
    } 
}); 

Template.page.events({ 
    'keyup .search': function() { 
     search_query = $(".search").val(); 
    } 
}); 

がtodo.htmlという:

<head> 
    <title>Todo list</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
</head> 

<body> 
    {{> page}} 
</body> 

<template name="page"> 
    <div class="tasks"> 
     <h1>Collections TODOs</h1> 
     <input type="text" class="search" placeholder="Search..."> 
     {{#each tasks}} 
      {{> task}} 
     {{/each}} 
    </div> 
</template> 

<template name="task"> 
    <div class="task well well-small"> 
     <button type="button" class="close cancel">&times;</button> 
     <h3> 
      {{#if done}} 
       <button type="button" class="checkmark done">&#10003;</button> 
      {{else}} 


    <button type="button" class="checkmark muted">&#10003;</button> 
     {{/if}} 
     {{title}} 
    </h3> 
    <div class="creator muted">{{creator}}</div> 
    <p>{{description}}</p> 
</div> 

だから今、私が入力中いつでもユーザーが何かを期待します.searchボックス変数​​が変更され、Template.page.tasksが異なる結果を返します。しかし、何も実際に更新されません。アプリを見ることができますhttp://slava.meteor.com

答えて

8

動的に検索を再度実行するには、reactive variableが必要です。それが動作

Template.page.events({ 
    'keyup .search': function() { 
     Session.set("search_query", $(".search").val()); 
    } 
}); 
+0

おかげで、この

Template.page.tasks = function() { return Tasks.find({title: {$regex: Session.get("search_query") }}); }; 

そして、あなたのイベントのよう​​Session変数を作成します。しかし、今、私の検索フィールドからテンプレートの更新テキストが消えるたびに。ページがリフレッシュされるように見えます。ヒントを教えてください。どうすればUIを改善できますか? – imslavko

+0

私は明らかに ''を設定し、手動でフォーカスを置くことができますが、それでもちょっと奇妙です – imslavko

+2

ページが更新されたときにユーザーの入力を保持する方法については、[preseve-input](http://docs.meteor.com/#template_preserve)を参照してください。 –

関連する問題