【问题标题】:Not able to make Twitter typeahead 0.10 with bloodhound with prefetch to work无法使用带有预取功能的 Bloodhound 使 Twitter typeahead 0.10 工作
【发布时间】:2014-02-12 11:32:48
【问题描述】:

我已经多次尝试使 typeahead.js 0.10 能够工作,并且只能使其与本地数据集一起工作。

使用预取或远程选项时,即使遵循示例页面,它也不起作用。要么我使用错误的语法格式化 json 文件和/或弄乱了寻血犬选项。

老实说,“datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.value); }”实际上是做什么的?空格是什么意思...

好吧,我把我当前的例子留在这里,希望有人能帮助我理解如何使用它。

如果可能的话,能否请您添加一个使用过滤器选项的 Bloodhound 示例,以及正在使用的 json 文件示例。

JSON 文件

     [
{
  "year": "1961",
  "value": "Test Side Story",
  "tokens": [
    "West",
    "Side",
    "Story"
  ]
},
{
  "year": "1962",
  "value": "Tawrence of Arabia",
  "tokens": [
    "Lawrence",
    "of",
    "Arabia"
  ]
},
{
  "year": "1963",
  "value": "Tom Jones",
  "tokens": [
    "Tom",
    "Jones"
  ]
},
{
  "year": "2012",
  "value": "Argo",
  "tokens": [
    "Argo"
  ]
}

]

Typeahead 0.10 脚本

       <script>
var films = new Bloodhound({
datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.value); },
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: 'http://localhost/dh/js/films.json'
});

films.initialize();

$('#cenas0').typeahead(null, {
displayKey: 'value',
source: films.ttAdapter(),
templates: {
suggestion: Handlebars.compile(
'<p><strong>{{value}}</strong> – {{year}}</p>'
)
}
});
</script>

HTML 代码(带有一些脚本声明)

     <script type="text/javascript" src="http://localhost/dh/js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="http://localhost/dh/js/typeahead.bundle.js"></script>


<input id="cenas0" class="typeahead" placeholder="cenas0"></input>

【问题讨论】:

    标签: json twitter-typeahead


    【解决方案1】:

    我很确定,奇怪的是,它与 html div 和类声明有关,如果我使用以下代码,它只是在您的输入周围添加一个 div 包装器,那么它似乎工作正常(使用 jquery 1.9. 1、提前输入最新包)

    html

        <div class="films">
     <input class="typeahead" name="film" type="text" autocomplete="off" value="">   
    
        </div>
    

    js 代码(我只剩下车把部分)

     var films = new Bloodhound({
        datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.value); },
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        limit: 10,
      prefetch: "js/films.json"
    
    
      });
    
      films.initialize();
    
      $('.films .typeahead').typeahead(null, {
    
        displayKey: 'value',
        source: films.ttAdapter()
    
      })
    
    
    });
    

    这是一个 jsfiddle,使用与本地存储相同的数据 http://jsfiddle.net/qLk8c/

    【讨论】:

    • 谢谢,它工作得很好。如果对数据库进行查询并获得响应怎么办?它的工作方式相同吗?提前致谢
    • 函数中的'tokenizer'、'whitespace'和handlebars有什么作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多