Typeahead.js无法读取未定义的属性“长度”

时间:2014-02-26 02:02:44

标签: javascript jquery json typeahead.js

所以我有一个我正在使用示例表单Typeahead.js页面的页面。当我在这里的示例中使用json文件时,它工作得很好:http://twitter.github.io/typeahead.js/data/repos.json

但是当我在这里使用我自己的JSON时:http://www.irishcentral.com/templates/ta-articles.json我收到错误"无法读取属性'长度'未定义"。从我所看到的是因为JSON无效但我检查了我的JSON对两个验证器,他们都说它有效。提前谢谢!

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<div class="CustomTemplate">
    <input class="example-irish typeahead" type="text" placeholder="" />
</div>

<script src="$cms.include("handlebars.js").url"></script>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="$cms.include("typeahead.bundle.js").url"></script>

<script>
    $(document).ready(function () {
        var repos = new Bloodhound({
          datumTokenizer: function(d) { return d.tokens; },
          queryTokenizer: Bloodhound.tokenizers.whitespace,
          prefetch: '/templates/repos.json'
        });

        repos.initialize();

        $('.CustomTemplate .typeahead').typeahead(null, {
          name: 'twitter-oss',
          displayKey: 'title',
          source: repos.ttAdapter(),
          templates: {
            suggestion: Handlebars.compile([
              '<p class="repo-language">{{author}}</p>',
              '<p class="repo-name">{{title}}</p>',
              '<p class="repo-description">{{summary}}</p>'
            ].join(''))
          }
        });
     });
</script>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

我认为你在prefetch中指定的路径是错误的。尝试使用以下prefetch: '/templates/repos.json'替换prefetch: '/templates/ta-articles.json'

答案 1 :(得分:0)

所以我想出来了,问题出在JSON中。 JSON中没有一个令牌元素,因此调用d.tokens会导致错误。我把它改成了我在json“title”中的标签,它现在运行得很好!