如何在 ExtJS 中从 google.maps.places.autocomplete 创建自动完成

how to create autocomplete from google.maps.places.autocomplete in ExtJS

如有错误请指正... 我写了一个没有错误的代码,在编辑这个 post 之前。 但是在我阅读了关于如何创建一个最小的、完整的和可验证的示例的评论之后。我很困惑,因为我之前的最小脚本不起作用,我不能包含完整的代码,因为我的代码很复杂,而且我没有可验证的示例。

我只需要知道如何从 google.maps.places 创建自动完成以在 EXTJS 中自动完成我的文本字段。

之前谢谢..

我找到了使用 Google Places-Library 解决此问题的方法。

我使用 Ext JS 3.4 的解决方案

1) 整合 Google 个地方 API
2) 创建自定义代理(我已经扩展了 Ext.data.DataProxy)
2a) 设置代理 api (read: true)
2b) 覆盖 doRequest 方法。在那里你可以打电话给 google.maps.PlacesService.textSearch
2c) 使用 Reader 处理地点请求(我已经创建了我的自定义 reader)
3) 将您的数据存储在商店中(我已经创建了自定义商店)
4) 创建组件来使用存储中的数据

请注意,您的应用程序必须遵守 Google Maps/Google 地球 API 的服务条款! (您必须显示徽标、第三方权利人等)

给你!

我已经从 @Rob Schmuecker 个回答中解决了这个问题。 因此,这个问题的重点是使用适当的代理从 google 调用 json,例如使用 :

addressModel.getProxy().setExtraParam('url', 'http://maps.google.com/maps/api/geocode/json?address=' + queryString + '&sensor=false');

根据此数据模型动态设置参数:

addressModel = Ext.define("Addresses", {
    extend: 'Ext.data.Model',
    proxy: {
        type: 'jsonp',
        url: 'https://jsonp.nodejitsu.com',
        reader: {
            type: 'json',
            root: 'results',
            totalProperty: 'totalCount'
        }
    },

    fields: ['formatted_address']
});

之后,您可以创建一个组合框,并在每次键入时向组合框添加侦听器,以调用代理中的额外参数。

这是@Rob Schmuecker 的演示: https://fiddle.sencha.com/#fiddle/g70

这是 Rob 的完整答案,他解决了我的问题: