Ваша проблема в том, что в moveToLocation
вы используете document.getElementById
, чтобы попытаться получить объект Map
, но это только дает вам HTMLDivElement
, а не элемент google.maps.Map
, который вы ожидаете. Таким образом, ваша переменная map
не имеет функции panTo
, поэтому она не работает. То, что вам нужно, - это белка map
где-то куда-то, и она должна работать так, как планировалось. Вы можете просто использовать глобальную переменную следующим образом:
var map; // global variable
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(0, 0),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// assigning to global variable:
map = new google.maps.Map(document.getElementById("map_canvas"),
mapOptions);
}
function moveToLocation(lat, lng){
var center = new google.maps.LatLng(lat, lng);
// using global variable:
map.panTo(center);
}
См. Рабочий jsFiddle здесь: http://jsfiddle.net/fqt7L/1/
В ситуациях, когда у вас есть поток XML, содержащий один из нескольких возможных типов документов, вы можете построить XmlSerializer
для каждого типа и вызвать XmlSerializer.CanDeserialize(XmlReader)
, чтобы последовательно проверить, можно ли десериализовать документ в этот тип. Этот метод не продвигает XmlReader
мимо корневого элемента, поэтому его можно вызвать несколько раз, не перечитывая поток.
Например, вы можете ввести следующий метод расширения:
public static partial class XmlSerializerExtensions
{
public static object DeserializePolymorphicXml(this string xml, params Type[] types)
{
using (var textReader = new StringReader(xml))
{
return textReader.DeserializePolymorphicXml(types);
}
}
public static object DeserializePolymorphicXml(this TextReader textReader, params Type[] types)
{
if (textReader == null || types == null)
throw new ArgumentNullException();
var settings = new XmlReaderSettings { CloseInput = false }; // Let caller close the input.
using (var xmlReader = XmlReader.Create(textReader, settings))
{
foreach (var type in types)
{
var serializer = new XmlSerializer(type);
if (serializer.CanDeserialize(xmlReader))
return serializer.Deserialize(xmlReader);
}
}
throw new XmlException("Invalid root type.");
}
}
Затем используйте его следующим образом:
var xmlBody = result.ResponseBody.DeserializePolymorphicXml(typeof(SuccessResponse), typeof(FailResponse));
if (xmlBody is SuccessResponse)
{
// Handle successful response
}
else if (xmlBody is FailResponse)
{
// Handle failed response
}
else
{
// unknown response
throw new InvalidOperationException("unknown response");
}
Пример скрипт .