我修改了「schmidlop」綁定重置標記輸入變化(拉特長輸入)和標記總是在地圖的中心。
的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)});
你能更具體的關於爲什麼你不能獲得元素的id?第二個視圖是模式/對話框嗎? –
第二個視圖是一個模式。和PS-我正在使用knockout.js。爲了訪問id,我使用了jquery語法$('#mapId')[0]語法,它返回null或undefined。當我使用id的atrribute綁定時,該值被分配給id,但它不代表div元素(這是map對象所需的),而只是一個等於id值的字符串。 – Empty
你可以在jsfiddle或你的問題上發佈一些代碼嗎?我在想,如果你在初始化谷歌地圖對象之前*敲除有機會將ID綁定到你的元素。 –