如何在传递给模板(hogan.js)之前预处理typeahead.js json结果?

时间:2013-09-28 16:24:39

标签: jquery bootstrap-typeahead typeahead.js hogan.js

当返回的结果是一个数组时,

typeahead.js很好用:

  var simpleCountriesList = [
     "Andorra",
     "United Arab Emirates",
     "Afghanistan",
     "Antigua and Barbuda"
  ];

就我而言,有一个对象数组,但它包含在这样的对象中:

  var countryObjectsWrappedInResults = {
   "results":[
      {
         "name":"Andorra"
      },
      {
         "name":"United Arab Emirates"
      },
      {
         "name":"Afghanistan"
      },
      {
         "name":"Antigua and Barbuda"
      }
   ]
};

{
   "maintainers":[
      {
         "name":"Jake Harding",
         "url":"https://twitter.com/JakeHarding"
      },
      {
         "name":"Tim Trueman",
         "url":"https://twitter.com/timtrueman"
      },
      {
         "name":"Veljko Skarich",
         "url":"https://twitter.com/vskarich"
      }
   ]
}

我创建了一个小的jsbin来说明本地和远程的问题: http://jsbin.com/OseWeKA/5/edit

我正在从bootstrap typeahead迁移,我可以使用updater从结果中弹出数组。 twitter.js的等价物是什么?

2 个答案:

答案 0 :(得分:2)

向远程数据集添加“过滤器:”。类似的东西:

remote: {
    url: '...',
    filter: function (response) {
        retval = [];
        for (var i = 0;  i < response.maintainers.length;  i++) {
            retval.push(response.maintainers[i].name);
        }
        return retval;
    },
}

filter将您的远程响应转换为基准数组。

无论如何,你的小提琴不起作用,因为你的服务器不支持JSONP,你明确指出dataType: "jsonp"。您的服务器还将text/plain作为Content-Type返回,其中应返回脚本。我假设你的“实时”系统没有真正的问题。

答案 1 :(得分:0)

我会建议你这样做。

  var newCountrylist = [];
 $.each( countryObjectsWrappedInResults.results , function(k , v ){
    newCountrylist.push(v.name);
  });