2015-12-15 56 views
0

我需要改變我的預輸入輸入場的幫手源(sergeyt:typeahead):typeahead.js:更改數據源,這是作爲一個輔助

<template name="searchMain"> 
    <input class="typeahead" 
      type="text" 
      autocomplete="on" 
      spellcheck="off" 
      data-sets="searchData" /> 
</template> 

現在我想改變它的任何事件是這樣的:

Template.searchMain.events({ 
    'keyup .typeahead': function(event, template) { 
     if ($(event.currentTarget).val() == 'change') { 
      // the user typed 'change' 
      // now change data source to 'newData' 
     } 
     else { 
      // else use original data source 'searchData' 
     } 
    } 
}) 

助手

Template.searchMain.helpers({ 
    searchData: function() { 
     // build some dataset from collections 
     return ['complex', 'old', 'dataset']; 
    }, 
    newData: function() { 
     // build some dataset from collections 
     return ['another', 'new', 'dataset']; 
    } 
}); 

因爲我會改變這樣的數據集...

$('.typeahead').typeahead('destroy'); 
$('.typeahead').typeahead({ 
    local: data 
}); 

...我不能使用助手。所以我不知道如何回到原點

回答

0

也許你可以使用一個reactive這個變量?

<template name="searchMain"> 
    <input class="typeahead" 
      type="text" 
      autocomplete="on" 
      spellcheck="off" 
      data-sets="varDataSets" /> 
</template> 

事件

Template.searchMain.events({ 
    'keyup .typeahead': function(event, template) { 
     if ($(event.currentTarget).val() == 'change') { 
      Session.set('dataSets', 'new'); 
     } 
     else { 
      Session.set('dataSets', 'search'); 
     } 
    } 
}) 

助手

Template.searchMain.helpers({ 
    varDataSets: function() { 
    if (Session.get('dataSets') === 'search') { 
     // build some dataset from collections 
     return ['complex', 'old', 'dataset']; 
    } 
    // build some dataset from collections 
    return ['another', 'new', 'dataset']; 
    } 
}); 

onRendered

Template.searchMain.onRendered(function() { 
    this.autorun(function() { 
    // will trigger the autorun everytime dataSets changes 
    Session.get('dataSets'); 
    Meteor.typeahead.inject('.typeahead'); 
    }); 
}); 
+0

我認爲這不會起作用,因爲數據集將在渲染時初始化。在這一點之後改變任何東西都不會給我新的結果... – user3142695

+0

我明白了......如果你強制重新渲染?請參閱我的編輯 – SylvainB

+0

不,這也行不通。我想我需要銷燬這個實例並執行像Meteor.typeahead.inject();'。但我真的不知道如何...... – user3142695

相關問題