2014-02-19 67 views
0

我有一個過濾器和每個問題。 我想創建一個過濾器,這將根據該過濾器更改數據。每個流星過濾器

<select id="filter"> 
<option value="all">all</option> 
<option value="one">one</option> 
<option value="two">two</option> 
</select> 

{{#each datas}} 
<span class="badge">{{Name}}</span> 
{{/each}} 

Template.mytemp.created = function(){ 
Session.set("activefilter", "all"); 
}; 

Template.mytemp.datas = function(){ 
    var ac = Session.get("activefilter"); 
    var result = new Array(); 
    if(ac != undefined){ 
    var data = RawData.find({filter:ac}).fetch(); 

     for(var ii = 0; ii < data.length;ii++){ 
     var nData = NextData.findOne({_id : data[ii].Next_ID}); 
     result[ii] = { 
      Name : nData.Name 
     }; 
     } 
    return result; 
    } 
}; 

我創建一個事件處理程序是這樣的:

Template.mytemp.events({ 
    'change #filter':function(){ 
    Session.set("activefilter",$('#filter').val()); 
    } 
}); 

每次我更換過濾器,沒有什麼happend,每DATAS沒有改變。 請幫助我如何更新過濾器更改數據?

回答

1

當您手動迭代光標(使用each等)時,您將不得不倒帶光標以重置它。從文檔http://docs.meteor.com/#rewind

forEachmap,或fetch方法只能上的光標調用一次服用。要多次訪問遊標中的數據,請使用rewind來重置遊標。

因此,你可以做這樣的事情:你的回答

Template.mytemp.datas = function(){ 
    var ac = Session.get("activefilter"); 
    var result = new Array(); 
    if(ac != undefined){ 
    var cursor = RawData.find({filter:ac}); 
    var data = cursor.fetch(); 

     for(var ii = 0; ii < data.length;ii++){ 
     var nData = NextData.findOne({_id : data[ii].Next_ID}); 
     result[ii] = { 
      Name : nData.Name 
     }; 
     } 

    cursor.rewind(); //we rewind our cursor here so that it can be iterated again from the beginning when needed 

    return result; 
    } 
}; 
+0

感謝塞爾坎,對不起,我在流星還是新的,如何在我的情況下使用cursor.rewind(),如果你不介意可以你給的例子代碼? – yozawiratama

+0

沒問題,我剛剛加了一個例子 –

+0

whoaaa它的工作原理,感謝兄弟。我真的很感謝,我幾乎從來沒有讀過所有文檔,如果你不告訴我這件事,可能我會失去並放棄。再一次感謝:D – yozawiratama