【问题标题】:how to create autocomplete from google.maps.places.autocomplete in ExtJS如何在 ExtJS 中从 google.maps.places.autocomplete 创建自动完成
【发布时间】:2023-03-18 15:47:01
【问题描述】:

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

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

之前谢谢..

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • 对不起,我放错地方了。请不要投票给我,我已经编辑了代码......
  • MCVE!阅读上面的评论!
  • MCVE 意味着您应该提供代码,精简到允许重现问题的最低要求,但以我们基本上可以复制/粘贴它来验证问题所在的方式完成。

标签: javascript extjs google-maps-api-3 autocomplete


【解决方案1】:

我已经从@Rob Schmuecker 的答案中解决了这个问题。 所以,这个问题的重点是关于使用适当的代理从谷歌调用 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 的完整答案,他解决了我的问题: Check This...

【讨论】:

    【解决方案2】:

    我想出了一种使用 Google Places-Library 解决此问题的方法。

    我使用 Ext JS 3.4 的解决方案

    1) 集成 Google Places API
    2) 创建一个自定义代理(我已经扩展了 Ext.data.DataProxy)
    2a) 设置代理 api (read: true)
    2b) 覆盖 doRequest 方法。在那里您可以拨打电话,即 google.maps.PlacesService.textSearch
    2c) 使用阅读器处理 Places 请求(我创建了自定义阅读器)
    3) 将您的数据存储在商店中(我已经创建了自定义商店)
    4) 创建使用存储中数据的组件

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

    你有它!

    【讨论】:

    • 您使用 google.maps.PlacesService 检索地点?我对使用 PlacesService 有点困惑,或者我使用 google.maps.places.AutocompleteService 类来检索地点预测。如果你知道了,你能给我一个小代码sn-p吗?只是想知道你如何把它放在你的文本字段中以显示自动完成。之前谢谢...
    • 基本上都是关于自定义存储、代理和读取器,因为这就是组件在 Ext JS 中使用数据的方式。确保您了解这些概念。 Ext.form.TextField 不能即时工作,因为该组件不包含存储信息的选项。我已经使用我自己的 Ext.form.ComboBox 寻求解决方案。发布我的整个代码会很复杂,因为我已经为这个问题创建了一个小型库。
    • 是的,你说得对,自动完成功能在文本字段中不起作用,因为我尝试了很多次,当我检查元素时得到了数据预测,但预测没有出现.所以使用 xtype:textfield 不起作用,但正如你提到的使用组合框,也许你可以给我一点代码 sn-p 而不是整个代码,只需为你的数据代理编写代码 sn-p 来检索自动完成预测。谢谢。
    • 这篇文章应该澄清一下:sencha.com/forum/…
    • 您的链接:sencha.com/forum/… 没有显示任何内容。
    猜你喜欢
    • 2018-03-10
    • 2015-12-16
    • 1970-01-01
    • 2010-12-22
    • 2017-10-30
    • 1970-01-01
    • 2014-09-30
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多