【问题标题】:Create a google map, using knockout.js使用 knockout.js 创建谷歌地图
【发布时间】:2017-07-31 20:16:53
【问题描述】:

我的名字是Eleni,这是第一次在这里发帖! 这些天来尝试使用 knockout.js 创建一个 google map。 这张地图应该有一个左侧位置列表,由淘汰赛创建, 我已经创建了,但是当用户点击同一个列表时也需要, 地图的标记出现在所选位置附近,所有其他位置都消失,也有淘汰赛。

我已经阅读了很多关于此的内容,但无法弄清楚伙计们,我使用的一些资源: 淘汰赛:“点击”绑定 connecting list view in knockout.js with map markers

如果有人可以查看我的 github 存储库: https://github.com/Heleni/maps_udacity 和帮助,我将不胜感激!!! 提前致谢!

【问题讨论】:

  • 两个链接都显示为未找到的页面,您介意将您的代码放在您的问题中吗?
  • 嗨,感谢您的通知,我刚刚上传了正确的链接,现在可以正常工作了。

标签: javascript google-maps google-maps-api-3 knockout.js


【解决方案1】:

我想我发现了,

所以这里是你正在做的事情的淘汰 js 代码。

告诉我这是否有效:

function Coord(lat, ing) {
var self = this;
self.lat = ko.observable(lat);
self.ing = ko.observable(ing);
}

function Place(title, lat, ing, address) {
    var self = this;
    self.title = title;
    self.address = address;
    self.coords = ko.observable(new Coord(lat,ing));
    self.visible = ko.observable(true);

    //create a function to make the list of locations clikable
     self.myList = function() {
        map.setZoom(18);
        map.panTo({lat: self.coords().lat(), lng: self.coords().ing()});
        //map.setCenter(markers[title].getPosition());
    }; 
}

function LocationsViewModel() {
    var self = this;

    self.query = ko.observable('');

    self.places = ko.observableArray([
        new Place("Ble Cafe-Restaurant", 40.632286, 22.944743, "Street: Agias Sofias 19, 54623"),
        new Place("Olympion Bar-Restaurant", 40.632744, 22.941767, "Street: Aristotelous Square 10, 54623"),
        new Place("Olive and Oregon Restaurant", 40.634679, 22.943193, "Street: Aristotelous Square 10, 54623"),
        new Place("Mojo Cafe", 40.631824, 22.940958, "Aristotelous 4, 54623"),
        new Place("Seven Seas Restaurant", 40.633300, 22.939356, "Kalapothaki 10, 54624"),
        new Place("Varelakia Gyros", 40.574634, 22.949332, "Street: Riga Fereou 97, 56728"),
    ]);

    self.search = function() {
      for(var x in self.places()) {
        if( self.query() != '' && self.places()[x].title.toLowerCase().indexOf(self.query().toLowerCase()) < 0) {
           self.places()[x].visible(false);
        }else{
            self.places()[x].visible(true);
        }
      }
  };
}

ko.applyBindings(new LocationsViewModel());

我让你找出把它放在哪里。

这里是html:

<div class="container">
<h1>Find Cafes and Restaurants in Thessaloniki City</h1>
<div class="myList">
  <form action="#">
    <!-- create search box for user's input -->
    <input placeholder="Search…" type="search" name="q" data-bind="value: query, valueUpdate: 'keyup'" autocomplete="off">
  </form>
  <div class="content">
    <!-- display the list -->
      <!--add the click event here to make the list clickable -->
    <ul data-bind="template: {name:'place', foreach:places}">

    </ul>
  </div>
</div>

这是脚本 balise 中的模板

<li data-bind="visible: visible"><strong data-bind="text: title, click: myList"></strong></li>

我已经更新了搜索功能的代码。 它包括 place 对象中的新 ko.observable、LocationsViewModel 中的新函数和 html 中的新标记。

【讨论】:

  • 再次感谢,我只是根据您的建议重新创建项目,我不知道是不是我的错误,但列表的标题不可点击,也无法为每个标题显示标记。我将发布我的代码供您查看。
  • 这里你可以看到我的新脚本文件github.com/Heleni/maps_udacity
  • 我编辑了 place 和 coord 的代码,稍后我将添加您需要使用的新 html 文件。您的搜索方法也不起作用,但我认为您将能够找到。
  • 也许这对我们有更多帮助:这是我需要我的清单做的工作:codepen.io/dmoojunk/pen/KzXGKq
  • 这实际上是我机器上的代码,上面有代码。好吧,除了猫和选择的文字。这仍然对你不起作用?我最终可以提交你的 git 吗?
【解决方案2】:

您的 github 链接不正确,导致 404。

但在淘汰赛中,您可以轻松地在左侧提供 gmap 的所有分数列表。 当你点击它时,你只用那个点刷新你的地图。

Knockout 的绑定让你刷新。

我认为淘汰赛的教程会告诉你怎么做。

祝你好运,

JBO

【讨论】:

  • 只需上传链接即可立即使用。我看过所有淘汰赛的导师,他们没有显示如何在谷歌地图中使用淘汰赛,所以对于第一次使用淘汰赛的人来说,他们很沮丧。
  • 好的,我已经下载了你的项目,我会尽力帮助你。据我所知,您没有正确使用它。好吧,让我们自己解释一下:脚本的第 229 行函数 myList(){ 正在使用模型的标题对象。但该功能不在模型中,因此标题未知。您必须创建一个包含标题和至少要为该对象使用的功能的剔除对象。然后在视图模型中包含该对象的列表。在您的 html 中,这意味着您在淘汰赛中遍历列表,然后您的点击将起作用。
  • 我已经在按照您所说的进行工作,非常感谢您的建议,您可以轻松发布更正的代码吗?无论如何,感谢您的宝贵时间。
猜你喜欢
  • 2016-11-27
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 2020-06-02
  • 2012-02-25
  • 2019-04-02
相关资源
最近更新 更多