5

我正在构建一个使用 HTML5 地理位置找到用户位置的应用程序。一旦他们的位置被检索到,他们的位置就会被绘制在地图上(父路线)。然后,他们可以选择查看在该位置(子路线)周围发布的推文列表。

因此,我需要将在父路由(存储在控制器上)检索到的坐标传递给子路由,以便正确查询 Twitter API。但是,我不确定如何做到这一点,或者即使我选择了最好的方法。

这是索引控制器:

App.IndexController = Ember.ObjectController.extend({

  coords: false,

  getGeoLocation: function() {
    if (navigator.geolocation) {
        this.set('retrieving', true);
        navigator.geolocation.getCurrentPosition(
            this.locationRetrieved.bind(this),
            this.locationFailed.bind(this),
            {
                timeout: 20000
            }
        );
    } else {
        this.set('geolocation', false);
    }
  },

  locationRetrieved: function(position) {
    this.set('coords', position.coords);
    this.get('target').transitionTo('what-do-you-want-to-know');
  }
});

WhatDoYouWantToKnow 控制器“需要”索引控制器:

App.WhatDoYouWantToKnowController = Ember.ObjectController.extend({

  needs: 'index',

  createMap: function() {
    var coords = this.get('controllers.index').get('coords');
    var pyrmont = new google.maps.LatLng(coords.latitude, coords.longitude);

    var map = new google.maps.Map(document.getElementById('map'), {
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: pyrmont,
        zoom: 8
    });

    var marker = new google.maps.Marker({
        map: map,
        position: pyrmont
    });
  }
});

这条路线有一个模板链接到“/what-do-you-want-to-know/tweets”路线:

<p>Your location:</p>
<div id="map"></div>
<ul>
  <li>{{#linkTo 'tweets'}}Tweets{{/linkTo}}</li>
</ul>

然后我需要将这些坐标传递到子路由:

App.TweetsRoute = Ember.Route.extend({
   model: function() {
    return App.Tweet.find({coords:});
  }
});

我正在使用 Ember Data 的基本适配器。

4

1 回答 1

5

在路线中很容易做到这一点。在路由中,您可以访问所有控制器。只需使用controllerFor这样的方法:

App.TweetsRoute = Ember.Route.extend({
    model: function () {
        var coords = this.controllerFor('index').get('coords');
        return App.Tweet.find({ coords: coords });
    }
});
于 2013-04-20T21:01:53.980 回答