我想提出一个单页的应用程序,其中在第二个观点我需要显示谷歌地图。 我使用谷歌地图API在地图对象被创建。
var map = new google.maps.Map(mapId, {
zoom: 5,
center: new google.maps.LatLng(55, 11),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
该参数mapId
是给我的一个问题。 该视图包含ID的DIV说“的azazaz”,但我不能够得到的ID,因此无法显示地图。 我试过HTML绑定,绑定的属性,但它不工作。 我是新来的淘汰赛。 请提出一些方法
你应该使用自定义像这样绑定:
ko.bindingHandlers.map = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var mapObj = ko.utils.unwrapObservable(valueAccessor());
var latLng = new google.maps.LatLng(
ko.utils.unwrapObservable(mapObj.lat),
ko.utils.unwrapObservable(mapObj.lng));
var mapOptions = { center: latLng,
zoom: 5,
mapTypeId: google.maps.MapTypeId.ROADMAP};
mapObj.googleMap = new google.maps.Map(element, mapOptions);
}
};
你的HTML应该是这样的:
<div id="mapDiv" data-bind="style:{width:'300px',height:'300px'},map:myMap"></div>
最后您的视图模型:
function MyViewModel() {
var self = this;
self.myMap = ko.observable({
lat: ko.observable(55),
lng: ko.observable(11)});
}
这里是一个小提琴 ,做比多一点你问什么,但应该能正常运行您的情况也是如此。
下面是使用淘汰赛JS和谷歌地图的一个很好的例子。 我们希望,这将帮助你在正确的轨道上。 http://www.codeproject.com/Articles/387626/BikeInCity-2-KnockoutJS-JQuery-Google-Maps
我已经修改“schmidlop”结合于在输入变化(LAT长输入)和标记物在图的中心总是重置标记。
HTML
<input data-bind="value: mapOne().lat" />
<input data-bind="value: mapOne().lng" />
绑定,在一些js文件包含这一点,包括在HTML中。
ko.bindingHandlers.map = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
$("#" + element.getAttribute("id")).data("mapObj","");
mapObj = ko.utils.unwrapObservable(valueAccessor());
var latLng = new google.maps.LatLng(
ko.utils.unwrapObservable(mapObj.lat),
ko.utils.unwrapObservable(mapObj.lng));
var mapOptions = { center: latLng,
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP};
mapObj.googleMap = new google.maps.Map(element, mapOptions);
mapObj.marker = new google.maps.Marker({
map: mapObj.googleMap,
position: latLng,
draggable: true
});
mapObj.onChangedCoord = function(newValue) {
var latLng = new google.maps.LatLng(
ko.utils.unwrapObservable(mapObj.lat),
ko.utils.unwrapObservable(mapObj.lng));
mapObj.googleMap.setCenter(latLng);
mapObj.marker.setPosition(latLng);
};
mapObj.onMarkerMoved = function(dragEnd) {
var latLng = mapObj.marker.getPosition();
mapObj.lat(latLng.lat());
mapObj.lng(latLng.lng());
};
mapObj.lat.subscribe(mapObj.onChangedCoord);
mapObj.lng.subscribe(mapObj.onChangedCoord);
google.maps.event.addListener(mapObj.marker, 'dragend', mapObj.onMarkerMoved);
$("#" + element.getAttribute("id")).data("mapObj",mapObj);
}
};
视图模型
self.mapOne = ko.observable();
self.mapOne({'lat':ko.observable(87.22),'lng':ko.observable(27.22)});
代替mapId
你要使用document.getElementById('map')
其中'map'
是包含图(div的ID <div id="map"></div>
这的jsfiddle应该有所帮助。