如何从组件内的夹具调用属性值?我正在尝试设置坐标以在bing maps api中放置一个引脚。我想从夹具中获取坐标。我该怎么做?
我正在用ember-cli构建一个应用程序,所以如果与emberjs有任何重要的区别来解决问题,请告诉我。
HERE是jsBin
这是html:
<!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>
这是JavaScript:
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'),
});
提前致谢。解决此问题所需的任何其他细节请询问,我会尽快回复
答案 0 :(得分: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