У меня есть следующий шаблон в моем html
<script id="mapview-tpl" type="text/x-handlebars-template">
<div class='header'><a href='#' class="button header-button header-button-left">Back</a><h1>Map</h1></div>
<div class='details'>
<script type="text/javascript">
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(-34.397, 150.644),
zoom: 8
};
var map = new google.maps.Map(document.getElementById("map-canvas"),
mapOptions);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
<div id="map-canvas"/>
</div>
и у меня есть функция "перевести" вид из домашнего вида в это представление, используя следующие
route: function() {
var self = this;
var hash = window.location.hash;
if (!hash) {
if (this.homePage) {
this.slidePage(this.homePage);
}else {
this.homePage = new HomeView(this.store).render();
this.slidePage(this.homePage);
}
return;
}
var match = hash.match(this.detailsURL);
if (match) {
this.store.findById(Number(match[1]), function(employee) {
self.slidePage(new EmployeeView(employee).render());
});
}
match = hash.match(this.mapsURL);
if (match) {
this.store.findById(Number(match[1]), function(employee) {
self.slidePage(new MapView(employee).render());
});
}
},
и, достигнув конца вышеприведенной функции, будет выведено следующее сообщение об ошибке Uncaught TypeError: Cannot call method 'match' of undefined
удается Uncaught TypeError: Cannot call method 'match' of undefined
hmm who?
======
Я забыл добавить, что эта ошибка возникает только тогда, когда значение (this.mapsURL) называется значением, оно будет вызывать эту ошибку только тогда, когда
match = hash.match(this.mapsURL);
if (match) {
this.store.findById(Number(match[1]), function(employee) {
self.slidePage(new MapView(employee).render());
});
}
называется. Если выше это работает просто отлично
Дурак я!!! выяснили, что это может быть "общая" ошибка из шаблона, который невозможно скомпилировать, и в моем случае имя шаблона было неправильно определено! благодаря
Для таких сценариев я обычно использую test
который безопаснее в случае undefined
значений: (this.detailsURL).test(hash)
и (this.mapsURL).test(hash)
.
В вашем случае я все равно также проверил бы значение hash
чтобы понять, что происходит: он должен быть "" в случае отсутствия хэша, но он даже не undefined
иначе он должен ввести ваше первое условие и вернуться, я думаю.
hash
, вероятно, не определен. И нет никакой функцииmatch
изundefined
. Добавитьhash = hash === undefined ? "" : hash