javascript - 将值从 ember 组件发送到父模板

标签 javascript google-maps ember.js ember-components ember-controllers

我想将 latlng 从 ember 组件传递到另一个 ember 组件 (g-map)。我的 Handlebars 模板:

  {{!-- Index.hbs --}}
  <div class="jumbotron-outside">
  <div class="jumbotron">
    <h1 class="display-3">See The Weather Outside :)</h1>
    <p class="lead">This is a simple forecast weather.</p>
    <hr class="my-4">
    <p>Just type everything bellow this input text to get all list of the city</p>
    {{text-autocomplete}}
    <p class="lead">
      <button class="btn btn-primary btn-default" href="#" role="button" disabled={{isDisabled}}>Search</button>
    </p>
  </div>
  {{g-map lat=lat lng=lng zoom=zoom}}
</div>

这是我的文本自动完成组件:

// text-autocomplete/component.js
import Ember from 'ember';

let lat;
let lng;
export default Ember.Component.extend({
    didInsertElement() { //dom can be acessed here :)
        var autocomplete = new google.maps.places.Autocomplete($('input')[0]);
        var parent = this.$('input');
        google.maps.event.addListener(autocomplete, 'place_changed', function() {
            var place = autocomplete.getPlace();
            lat = place.geometry.location.lat();
            lng = place.geometry.location.lng();
        });
    }
});

我想将 latlng 值从 text-autocomplete 组件传递到 g-map组件在谷歌地图上绘制标记。

有人能解决这个问题吗? :(

最佳答案

创建index.js Controller 文件并引入latlngzoom属性。您可以将此属性传递给组件 text-autocompleteg-maptext-autocomplete 该组件应向 Controller 发送操作,以更新 latlng 的新值,因为有两种方式绑定(bind),它将在其他方式中自动更新也有地方。

index.js Controller 文件,

import Ember from 'ember';
export default Ember.Controller.extend({
    lat:'',
    lng:'',
    zoom:'',
    actions:{
        updateLatAndLng(lat,lng){
            this.set('lat',lat);
            this.set('lng',lng);
        }
    }
});

索引.hbs

{{text-autocomplete lat=lat lng=lng updateLatAndLng=(action 'updateLatAndLng')}}
{{g-map lat=lat lng=lng zoom=zoom}}

text-autocomplete.js 文件

import Ember from 'ember';
export default Ember.Component.extend({
    didInsertElement() { //dom can be acessed here :)
        var autocomplete = new google.maps.places.Autocomplete($('input')[0]);
        var parent = this.$('input');
        let _this = this;
        google.maps.event.addListener(autocomplete, 'place_changed', function() {
            var place = autocomplete.getPlace();
            lat = place.geometry.location.lat();
            lng = place.geometry.location.lng();
            _this.sendAction('updateLatAndLng',lat,lng); //here we are sendin actions to controller to update lat and lng properties so that it will reflect in all the other places.
        });
    }
});

关于javascript - 将值从 ember 组件发送到父模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42777225/

相关文章:

javascript - Ant Design 如何禁用子菜单的点击事件?

android - 我的应用应该多久使用 GPS 更新一次用户的位置?每 1 秒是矫枉过正还是罚款?

javascript - Ember.js - 每行显示两个表格单元格

javascript - Ember .get 未返回正确的值

javascript - EmberJS transitionTo/linkTo 回调

javascript - 如何从另一个应用程序将图像共享到我的 Cordova/PhoneGap 应用程序?

javascript - 如何在 Protractor 中的选择元素中返回可用选项的列表?

javascript - 为什么哈希函数左移 5 位?

javascript - map 中心永远不在允许的范围内

javascript - Google Maps API - 自动居中和自动缩放