谷歌地图和knockoutjs(Google maps and knockoutjs)

2019-08-01 04:08发布

我想提出一个单页的应用程序,其中在第二个观点我需要显示谷歌地图。 我使用谷歌地图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绑定,绑定的属性,但它不工作。 我是新来的淘汰赛。 请提出一些方法

Answer 1:

你应该使用自定义像这样绑定:

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

这里是一个小提琴 ,做比多一点你问什么,但应该能正常运行您的情况也是如此。



Answer 2:

下面是使用淘汰赛JS和谷歌地图的一个很好的例子。 我们希望,这将帮助你在正确的轨道上。 http://www.codeproject.com/Articles/387626/BikeInCity-2-KnockoutJS-JQuery-Google-Maps



Answer 3:

我已经修改“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)});


Answer 4:

代替mapId你要使用document.getElementById('map')其中'map'是包含图(div的ID <div id="map"></div> 这的jsfiddle应该有所帮助。



文章来源: Google maps and knockoutjs