EDIT **
Ниже представлен ответ для Durandal 1.2. В durandal 2.0 событие viewAttached
было , переименованное в - attached
. Вы можете прочитать документацию Durandals о нем here.
Durandal имеет viewAttached события, которое вызывается на вашем ViewModel когда представление было привязкой данных и прикрепляется к йотам. Это было бы хорошим местом для вызова карт google.
define(['services/logger'], function (logger) {
var vm = {
viewAttached: initialize
title: 'Home View',
map: map
};
return vm;
var map;
function initialize(view) {
logger.log('Home View Activated', null, 'home', true);
var mapOptions = {
zoom: 8,
center: new google.maps.LatLng(-34.397, 150.644),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
}
});
EDIT СНОВА для решения народов комментарии **
Согласно комментарий Джейми Хаммонда это лучшая практика для сферы вашей DOM трансверсально зрения, который прикреплен. Если элемент DOM находится отдельно от представления.
Таким образом, внутри вашей viewAttached
(в Дюрандала 1.2) или attached
(в Дюрандаль 2.0) вы бы:
var map;
var mapOptions = { /*map options*/ };
var vm = {
attached: function (view) {
var mapCanvas = $('#map-canvas', view).get(0);
map = new google.maps.Map(mapCanvas, mapOptions);
}
}
Я не запутались с Дюрандала 2.0 вообще, потому что я был очень занят работой и все, и когда я возился с Durandal 1.0, это было просто для удовольствия, но я действительно люблю рамки и надеюсь, что в один прекрасный день вы сможете играть с 2.0. С учетом сказанного у меня возникла проблема с созданием карты в viewattached в Durandal 1.0. Но я не использовал карты Google. Я использовал Leafletjs. Мое решение проблемы заключалось в создании задержки в представленииAttached, который бы перерисовал карту после небольшой задержки. Это произошло потому, что Переход Дюрандальте в представлении не работает хорошо с листочками способностью рисовать карту в элементе йота, как он летит и выцветание в
Так, внутри viewAttached я бы нарисовать карту так:.
window.setTimeout(drawMap, 10);
Опять же, это была очень специфическая проблема, с которой я столкнулся, и не проблема с Дюрандалом. Это было больше проблем с Leafletjs не делает карту правильно, когда элемент DOM еще в переходе щих.
работы, спасибо! – Mariusz
В Durandal 2.0 «viewAttached» был переименован в «прикрепленный». Кроме того, приведенный выше код работает некорректно даже после устранения очевидных синтаксических ошибок, таких как добавление запятой после инициализации. Как и другие, я все еще ищу решение, которое работает с новым API Google. – pilavdzice
Вы всегда должны иметь доступ к виду. например $ (view) .find ('# map-canvas') –