2015-02-02 2 views
1

구성 요소 안의 조명기에서 속성 값을 호출하려면 어떻게해야합니까? 빙지도 api에 핀을 배치하는 좌표를 설정하려고합니다. 고정 장치에서 좌표를 얻고 싶습니다. 어떻게하면 좋을까요?엠버의 구성 요소에 값을 가져 오는 방법은 무엇입니까?

ember-cli로 앱을 제작 중이므로 문제를 해결하기 위해 emberjs와 중요한 차이가 있으면 알려 주시기 바랍니다.

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Ember Starter Kit</title> 
    <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.1/normalize.css"> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script src="http://builds.handlebarsjs.com.s3.amazonaws.com/handlebars-v2.0.0.js"></script> 
    <script src="http://builds.emberjs.com/tags/v1.9.1/ember.js"></script> 
     <script charset="UTF-8" type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script> 
</head> 
<body> 

    <script type="text/x-handlebars"> 
    <h2>Welcome to Ember.js</h2> 

    {{outlet}} 
    </script> 

    <script type="text/x-handlebars" data-template-name="index"> 
    {{bing-map height=590}} 
    </script> 


</body> 
</html> 

이 자바 스크립트입니다 : 사전에

App = Ember.Application.create(); 

App.Router.map(function() { 
    // put your routes here 
}); 

App.IndexRoute = Ember.Route.extend({ 
    model: function() { 
    return App.COORD; 
    } 
}); 

App.COORD=[ 
    { 
    id:1, 
    latitude: 34.05, 
    longitude: -118.25, 
    }, 
    { 
    id:2, 
    latitude: 25.77, 
    longitude: -80.19, 
    }, 
    { 
    id:3, 
    latitude: 28.53, 
    longitude: -81.37, 
    } 
]; 

App.BingMapComponent = Ember.Component.extend({ 
    attributeBindings: ['style'], 
    classNames: ['bing-map'], 
    bingKey: "AkmMkZ5YpX8xsXHY4uBxD8Gz2S5f3GkTRebOw0t4voyb7gFryc0ElW4toY3cJbTt", 
    width: '45%', 
    height: '100%', 
    latitude: 0, 
    longitude: 0, 
    latitudePin:undefined, 
    longitudePin:undefined, 
    zoom: 1, 
    mapTypeId: 'r', // r:road, a:aerial 



    setPin: function(){ 
    Liens.forEach(function(lien){ 
     if(lien.setLocation){ 
      this.get('latitude').push(lien.latitude); 
      this.get('longitude').push(lien.longitude); 
      console.log('this is happening'); 
     } 
    }); 
    }, 

    init: function(){ 
    this._super(); 
    if (!this.get('bingKey')){ 
     throw('Missing bingKey'); 
    } 
    this.api = Microsoft.Maps; 
    this.map = null; 
    }, 

    style: function(){ 
    return "position: relative; width: %@px; height: %@px".fmt(
     this.get('width'), 
     this.get('height') 
    ); 
    }.property('width', 'height'), 

    center: function(){ 
    var latitude = parseFloat(this.get('latitude')); 
    var longitude = parseFloat(this.get('longitude')); 
    longitude = this.api.Location.normalizeLongitude(longitude); 

    return new this.api.Location(latitude, longitude); 
    }.property('latitude', 'longitude'), 

    mapOptions: function(){ 
    return { 
     center:  this.get('center'), 
     zoom:  parseInt(this.get('zoom'),10), 
     mapTypeId: this.get('mapTypeId') 
    }; 
    }.property('center','zoom','mapTypeId'), 

    createMap: function(){ 
    var el = this.$()[0]; 
    var options = this.get('mapOptions'); 
    options.credentials = this.get('bingKey'); 
    this.map = new Microsoft.Maps.Map(el, options); 

    var latitude = this.get('latitudePin'); 
    var longitude = this.get('longitudePin'); 



    var pin = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(31,-118)); 
    this.map.entities.push(pin); 




    // var pin1 = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(this.get('latitude'), this.get('longitude'))); 
    // Microsoft.Maps.Events.addHandler(pin1, 'click'); 



    // var pin2 = new Microsoft.Maps.Pushpin(new Microsoft.Maps.Location(0, -30)); 
    // pin2.Title = "This is Pin 2"; 
    // pin2.Description = "Pin 2 description"; 
    // Microsoft.Maps.Events.addHandler(pin2, 'click'); 
    // this.map.entities.push(pin2); 


// var latitude; 
// var longitude; 
    // var loc = new Microsoft.Maps.Location(latitude, longitude); 
    // var pushpin = new Microsoft.Maps.Pushpin(loc); 
    // this.map.entities.push(pushpin); 


    }.on('didInsertElement'), 

    removeMap: function(){ 
     this.map.dispose(); 
    }.on('willDestroyElement'), 

}); 

감사

HERE이는 HTML입니다 jsBin

입니다. 필요한 기타 세부 사항은이 문의하시기 바랍니다 해결하기 위해 다음과 같이 나는 최대한 빨리

답변

2

당신은 당신의 구성 요소에 model를 전달할 수 있습니다 응답 있습니다 :

<script type="text/x-handlebars" data-template-name="index"> 
    {{bing-map height=590 pins=model}} 
</script> 

을 다음 구성 요소 pins에서 구성 요소의 속성이됩니다 당신은 당신의 좌표에 얻을 수 있도록 다음과 같이

var pins = this.get('pins'); 
pins.forEach(function(pin, index){ 
    console.log(index + 1 + " " + pin.latitude); 
}); 

근무 데모 here

관련 문제