2013-04-20 31 views
5

Tôi đang xây dựng một ứng dụng mà vị trí của người dùng được tìm thấy bằng cách sử dụng vị trí địa lý HTML5. Khi vị trí của họ đã được truy lục vị trí của họ được vẽ trên bản đồ (tuyến đường chính). Sau đó, họ có thể chọn xem danh sách các tweet được đăng xung quanh vị trí đó (tuyến đường con).Ember.js: Làm cách nào để truyền dữ liệu giữa bộ điều khiển tuyến đường mẹ và tuyến đường con?

Vì vậy, tôi cần phải vượt qua tọa độ tôi đã truy xuất tại tuyến đường mẹ (được lưu trữ trên bộ điều khiển) đến tuyến đường con để tôi có thể truy vấn API Twitter đúng cách. Tuy nhiên, tôi không chắc chắn làm thế nào để làm điều này hoặc thậm chí nếu tôi đã chọn cách tiếp cận tốt nhất.

Đây là bộ điều khiển chỉ số:

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'); 
    } 
}); 

Bộ điều khiển WhatDoYouWantToKnow "cần" bộ điều khiển chỉ số:

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 
    }); 
    } 
}); 

Tuyến đường này có một mẫu mà liên kết đến '/ what-do-bạn Tuyến đường -want-to-know/tweets ':

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

Sau đó, tôi cần chuyển các hợp đồng này cho con ro ute:

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

Tôi đang sử dụng Adaptor Basic Ember Data.

Trả lời

5

Thật dễ dàng để làm điều đó trong một tuyến đường. Trong tuyến đường bạn có quyền truy cập vào tất cả các bộ điều khiển. Chỉ cần sử dụng phương pháp controllerFor như thế này:

App.TweetsRoute = Ember.Route.extend({ 
    model: function() { 
     var coords = this.controllerFor('index').get('coords'); 
     return App.Tweet.find({ coords: coords }); 
    } 
}); 
+0

controllerFor bị phản đối, thay vì điều này, bạn nên sử dụng 'nhu cầu: 'index'' trong tweetsController – xamenrax

+0

@Nikita tôi không thể tìm thấy nơi bạn đã có được thông tin này. Mã này dường như không cho biết phương thức 'controllerFor' không được chấp nhận. – louiscoquio

+0

Tốt hơn nên sử dụng 'controllerNameName' mới trong mã điều khiển ngay bây giờ. – xamenrax

Các vấn đề liên quan