如何将谷歌放置 API 结果数组与淘汰赛集成
How to integrate google places API array of results with knockout?
我正在尝试创建一个谷歌地图应用程序,该应用程序使用地点API在地图上添加有趣地点的标记,并使用KNOCKOUT.js填充列表。
到目前为止,我设法使用以下代码用位置填充地图:
'use strict'
// Google Maps API and Places library functions to start the map
var map;
var service;
var infowindow;
function initialize() {
var coimbra = new google.maps.LatLng(40.209658,-8.419721);
map = new google.maps.Map(document.getElementById('map'), {
center: coimbra,
zoom: 18,
disableDefaultUI: true
});
// Request for places library for nearby places of interest
// Most of the code comes from the google Maps API documentation
var request = {
location: coimbra,
radius: '400',
types: ['store', 'café','food', 'bar']
};
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);
}
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var place = results[i];
createMarker(results[i]);
}
}
}
// Function that receives the results of the callback function and adds the markers to the map
function createMarker(place) {
var placeLoc = place.geometry.location;
var marker = new google.maps.Marker({
map: map,
position: place.geometry.location
});
}
我也有以下 HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Neighbourhood Map</title>
<link rel="stylesheet" href="css/main.css">
<script src='js/knockout-3.4.0.js'></script>
<script src="http://code.jquery.com/jquery-1.12.0.min.js"></script>
<script src='js/app.js'></script>
</head>
<body>
<div class="search-bar">
<form class='search'>
<input placeholder="Filter results by name" autofocus>
<button>Submit</button>
</form>
</div>
<div class="content">
<ul class="list-places">
<li class="place"></li>
</ul>
</div>
<div id="map"></div>
<script async defer src='https://maps.googleapis.com/maps/api/js?key=AIzaSyBXeGehzCayzqOJWG56XYrst22ZQ-hUzJA&libraries=places&callback=initialize'></script>
</body>
</html>
从 Knockout 文档中,我似乎可以通过将来自 places API 的数组设置为ko.observableArray
来填充列表,然后在 <ul>
和 <li>
标签中使用相应的数据绑定来填充列表 API 找到的所有位置。
但是,我的主要疑问是如何访问该数组以将其设置为ko.observableArray
:
我应该做这样的事情还是我错过了任何其他方式?
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var results = ko.observableArray(results);
var place = results[i];
createMarker(results[i]);
}
}
}
提前感谢!
概述挖空的工作原理:您有一个视图、挖空和一个视图模型。视图是 DOM:用户将看到的所有内容。视图模型是表示视图所有可能状态的变量集合,包括数据和控件状态(如选中了哪些复选框)。挖空位于视图和视图模型之间,其目的是确保它们同步:视图中的更改会反映在视图模型中,反之亦然。这样,您就不必弄乱 DOM。
绑定处理程序属于 Knockout。它们告诉 Knockout 如何将视图的特定部分与视图模型中的相应元素同步。包括基本的、常见的 DOM 元素的处理程序,但是当您获得像 Google 地图工具包中的复杂元素时,没有预先编写的绑定。
在绑定处理程序中,您可以访问 DOM 元素和绑定到它的视图模型变量,以便可以使它们的更改相互反映。
综上所述,在我看来,您的数组获取是一种不涉及 DOM 的纯数据操作,因此您可能只需执行
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
myArrayOfResults(results);
}
}
在您的视图模型代码中的某个位置,其中myArrayOfResults
是视图模型中定义的可观察数组。
如果您还没有完成淘汰赛教程,那么值得您花时间。当您需要编写绑定处理程序时,文档也会涵盖这一点。还有这篇文章提供了一些更全面的指导。
- knex:根据结果创建数组的合适方法是什么
- Mongodb$in以与数组中相同的顺序获取结果
- 使用ScriptObjectMirror将数组结果从JavaScript转换为有用的东西
- 从重复的javascript数组结果集中只获取一行
- 如何从合并的结果集中提取数组
- JSON返回数组的奇怪结果
- JavaScript-将for循环的多个结果推送到数组中
- 从source-mirth检索通道目标中的数组结果
- json_encode 的 mysqli 查询奇怪的数组结果
- 茉莉花期望不匹配数组结果
- 用promise处理promise的数组结果
- 根据id表将单个数组结果发送到打印机
- 如何获得Javascript数组结果到Java
- 显示输入文本的数组结果
- Javascript删除数组结果留下一个逗号
- 如何推翻数组结果树从子-父到父-子在Javascript
- 将数组结果过滤到下拉列表中
- Javascript数组结果返回undefined
- Javascript:标记数组结果
- 如何将数组结果视为数组Javascript