3

我想建立一個標籤輸入像StackOverflow中的一個。我試圖將Meteor集合用作TypeaheadBloodhound的遠程或預取數據,因爲我想最終使用Bootstrap Tokenfield使用流星收集類型頭血獵犬,最好不用我自己的API

根據他們的文檔和示例,JSON數據的url是絕對必需的。我怎樣才能將這些數據,最好是反應性地提供給獵豹犬?我查看了Meteor Typeahead package,但我無法弄清楚如何將它與Meteor Tokenfield package一起使用。

下面是我試過的,但它不起作用。 ?:(

<div class="control-group"> 
    <label class="control-label" for="users">Users</label> 
    <div class="controls"> 
     <input type="text" class="form-control" id="tokenfield-typeahead-users" value="" /> 
    </div> 
</div> 

Template.viewUsers.rendered = function() { 
    var users = new Bloodhound({ 
     datumTokenizer: function(d) { 
     return Bloodhound.tokenizers.whitespace(d.username); 
     }, 
     queryTokenizer: Bloodhound.tokenizers.whitespace, 
     limit: 20, 
     remote: { 
     // url points to a json file that contains an array of tokens 
     url: function() { 
      return Meteor.users.find().fetch().map(function(user){ return user.username; }); 
     } 
     } 
    }); 

    users.initialize();// kicks off the loading/processing of `local` and `prefetch` 

    // passing in `null` for the `options` arguments will result in the default 
    // options being used 
    $('#tokenfield-typeahead-users').tokenfield({ 
     typeahead: [null, { 
     name: 'users', 
     displayKey: 'username', 
     source: users.ttAdapter() 
     // `ttAdapter` wraps the suggestion engine in an adapter that 
     // is compatible with the typeahead jQuery plugin 
     }] 
    }); 
}; 

我不想建立一個API,但如果我有,我怎麼提供數據

+0

我還沒有看過TokenField,但是你有沒有考慮過使用[autocomplete](http://autocomplete.meteor.com)軟件包,並根據需要從Bootstrap移植該功能?標籤輸入的另一種替代方法是[選擇2](https://atmospherejs.com/?q=select2)。 – 2014-11-05 22:42:01

+0

是的,我已經考慮過這些。但是,正如我的文章的第一句話所述,「我想要構建一個像StackOverflow中那樣的標籤輸入。」您建議的解決方案不能滿足此要求。除非你知道讓他們這樣做的方法嗎? – FullStack 2014-11-06 03:34:56

+0

試圖做同樣的事情... – 2016-09-19 13:28:43

回答

0

This code posting用途:

local: [{ val: 'dog' }, { val: 'pig' }, { val: 'moose' }], 
0

花了不少時間去得到tokenfield反應與我的流星收集工作,所以我只是張貼我的解決方案在這裏。

我最終沒有使用Bloodhound,而是隻是使用M直接流星。 我意識到RegEx搜索是非常原始的,但如果您搜索的是標籤集合,它會完成這項工作。

var currentTags = []; // Handle this however you wish 

$('#tokenfield').tokenfield({ 
    typeahead: [null, { 
     name: 'tags', 
     displayKey: 'value', 
     source: function(query, syncResults, asyncResults) { 

      var suggestedTags = Tags.find({value: { 
       $regex: "^"+query, 
       $options: "i", 
       $nin: currentTags 
      }}).fetch(); 

      syncResults(suggestedTags); 
      //Optionally do some server side lookup using asyncResults 
     } 
    }] 
});