Как встроить Карты Google в поле в Odoo с помощью нового виджета?

#javascript #google-maps #odoo #odoo-10

#javascript #google-карты #odoo #odoo-10

Вопрос:

Я новичок в Odoo и я учусь создавать новый виджет, в первый раз я хочу встроить экран Google Maps в свою форму. Для начала я создал две группы внутри <record><form> , в первой группе я показал некоторые данные (все в порядке), а во второй группе я хочу показать экран Google Maps (это проблема). Я создал модуль под названием vz.visit .

1. Сначала попробуйте

Создайте google_maps_widget.js , teste.xml и google_maps_widget.xml .

views.xml

 <record model="ir.ui.view" id="vz_visit_create_form_view_2">
  <field name="name">vz.visit.form</field>
  <field name="model">vz.visit</field>
  <field name="arch" type="xml">
    <form string="Registro de Visita">
      <sheet>
        <group>

          <!-- DATA GROUP: It's OK -->
          <group>
            <field name="name" readonly="1"/>
            <field name="partner_id"/>
            <field name="description"/>
            <field name="date_start"/>
            <field name="date_end"/>
            <field name="duration"/>
            <field name="location"/>
          </group>

          <!-- MAP GROUP: Not works -->
          <group>
            <field name="google_map_partner" widget="vz_google_map" nolabel="1"/>
          </group>

        </group>
      </sheet>
    </form>
  </field>
</record>
  

google_maps_widget.js

 odoo.define('vz_visit.FieldMap', function(require) {
"use strict";

var core = require('web.core');
var form_common = require('web.form_common');

var FieldMap = form_common.AbstractField.extend({
    template: 'FieldMap',
    start: function() {
        var self = this;

        this.map = new google.maps.Map(this.el, {
            center: {lat:-26.22947, lng:-52.671561},
            zoom: 10,
            disableDefaultUI: false,
        });
    }
});

core.form_widget_registry.add('vz_google_map',FieldMap);

return {
    FieldMap : FieldMap,
};

});
  

google_maps_widget.xml

 <?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
    <t t-name="FieldMap">
        <div class="vz_gmap"></div>
    </t>
</templates>
  

teste.xml

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<odoo>
    <data>
        <template id="assets_backend" inherit_id="web.assets_backend">
            <xpath expr="." position="inside">
                <script type="text/javascript" src="/vz_visit/static/src/js/google_maps_widget.js"/>
            </xpath>
        </template>
    </data>
</odoo>
  

Результат: страница не загружена и отображаются ошибки.

Ошибки:

  • Диалоговое окно: ReferenceError: Google is not defined.
  • Консоль: ReferenceError: Google is not defined.

2. Вторая попытка

Идея: использовать функцию обратного вызова для загрузки карт Google в src script. Редактирование следующих двух файлов:

teste.xml

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<odoo>
    <data>
        <template id="assets_backend" inherit_id="web.assets_backend">
            <xpath expr="." position="inside">
                <script type="text/javascript" src="/vz_visit/static/src/js/google_maps_widget.js"/>
                <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=[MY_API_KEY]amp;callback=initMap"/>
            </xpath>
        </template>
    </data>
</odoo>
  

google_maps_widget.js

 odoo.define('vz_visit.FieldMap', function(require) {
"use strict";

var core = require('web.core');
var form_common = require('web.form_common');

var FieldMap = form_common.AbstractField.extend({
    template: 'FieldMap',
    start: function() {
        var self = this;

        var map;

        function initMap() {
            map = new google.maps.Map(document.getElementById('vz_google_map'), {
                center: {lat: -34.397, lng: 150.644},
                zoom: 10
            }
        );
      }
    }
});

core.form_widget_registry.add('vz_google_map',FieldMap);

return {
    FieldMap : FieldMap,
};

});
  

Результат: страница загружена, но карта не отображается.

введите описание изображения здесь

Ошибки:

  • Консоль: Could not get content for https://maps.googleapis.com/maps/api/js?key=API_KEY defined in bundle web.assets_beckend

Комментарии:

1. Вы получаете какие-либо ошибки в консоли разработчика браузера?

2. Да, 1. Ошибки при первой попытке: imgur.com/a/rT9nmMA

3. 2. Ошибки при второй попытке: imgur.com/a/UWozp7V

4. Ошибки @travisw выше

5. Пожалуйста, укажите ошибки в виде текста (не изображений); и в вашем вопросе (не в комментариях), .