2014-02-09 30 views
0

我試圖做一個通用函數來啓用typeahead標記查找。我在這方面取得了一些成功,直到我試圖推廣這個功能。現在它似乎工作,但更新錯誤的領域。Tagsmanager.js 3.0與tritter-typeahead更新錯誤的字段

我認爲創建var tmApi的行不會保留在本地。或者至少回調是訪問錯誤的變量。並想法如何獲得回調引用本地的?

感謝

<div class="tag-container" id="skills-container"></div> 
<input class="form-control" id="skills-add" type="text" 
data-tag="skills" data-prefill="${traveler.skills}" data-tagfile="/inc/ajax/skills.json"> 
<input type="hidden" id="skills" name="skills"> 

<script>setupTags();</script> 

function setupTags(){ 

    var fields = $('INPUT[type="text"]'); 
    for (var i=0; i<fields.length; i++){ 

     if (fields[i].getAttribute("data-tag")){ 
      var tag  = fields[i].getAttribute("data-tag"); 
      var prefill = fields[i].getAttribute("data-prefill"); 
      var tagfile = fields[i].getAttribute("data-tagfile"); 

      console.log(tag); 

      var tmApi = $('#'+tag+'-add').tagsManager({ 
       backspace: [], 
       tagsContainer: '#'+tag+'-container', 
       delimiters: [9, 13, 44], // tab, enter, comma 
       prefilled: prefill, 
       output: '#'+tag 
      }); 

      console.log(tmApi); 

      var tagsdb = new Bloodhound({ 
        datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.name); }, 
        queryTokenizer: Bloodhound.tokenizers.whitespace, 
        prefetch: { 
        url: tagfile, 
        cacheKey: tag, 
        ttl: 600000, //10 min 
        filter: function(list) { 
         return $.map(list, function(tag) { return { name: tag }; }); 
        } 
        } 
      }); 
      tagsdb.initialize(); 

      $('#'+tag+'-add').typeahead(null, { 
       name: tag, 
       displayKey: 'name', 
       source: tagsdb.ttAdapter() 
      }).on('typeahead:selected', function (e, d, s) { 
       tmApi.tagsManager("pushTag", d.name); 
      }); 

     } 
    } 
} 

回答