Вход

Просмотр полной версии : не работает backbone.js(Router)


torsar
22.04.2013, 22:57
index.html :
<!DOCTYPE html>
<html>
<head>
<title>Hello, Backbone</title>
<script src="js/underscore.js"></script>
<script src="js/backbone.js"></script>
<script src="js/jquery-1.9.1.js"></script>
<script src="js/index.js"></script>
<link type="text/css" rel="stylesheet" href="css/style.css">
</head>
<body>
<div id="menu"> <!-- Блок меню -->
<ul>
<li><a href="#!/">Start</a></li>
<li><a href="#!/success">Success</a></li>
<li><a href="#!/error">Error</a></li>
</ul>
</div>
<div id="start" class="block">
<div class="userplace">
<label for="username">Имя пользователя: </label>
<input type="text" id="username" />
</div>
<div class="buttonplace">
<input type="button" value="Проверить" />
</div>
</div>
<div id="error" class="block">
Ошибка такой пользователь не найден.
</div>
<div id="success" class="block">
Пользователь найден.
</div>
</body>
</html>

index.js :
var Controller = Backbone.Router.extend({
routes: {
"": "start", // Пустой hash-тэг
"!/": "start", // Начальная страница
"!/success": "success", // Блок удачи
"!/error": "error" // Блок ошибки
},

start: function () {
$(".block").hide(); // Прячем все блоки
$("#start").show(); // Показываем нужный
},

success: function () {
alert("PP");
$(".block").hide();
$("#success").show();
},

error: function () {
$(".block").hide();
$("#error").show();
}
});

var controller = new Controller(); // Создаём контроллер


//Backbone.history.start(); // Запускаем HTML5 History push

Я так понимаю, должны вызываться события на роутере при клике на ссылках:
<div id="menu"> <!-- Блок меню -->
<ul>
<li><a href="#!/">Start</a></li>
<li><a href="#!/success">Success</a></li>
<li><a href="#!/error">Error</a></li>
</ul>
Не работает

da_ff
23.04.2013, 01:19
Так раскоментируй Backbone.history.start()

da_ff
23.04.2013, 02:37
Ложь! Он и без jq может обойтись, единственная зависимость - underscore. Однако, если на странице найден jQuery, то объекты будут расширены некоторыми дополнительными полями.

torsar
23.04.2013, 10:08
Chrome в консоли віводит такую бадягу :
Error in event handler for 'undefined': Cannot read property 'combi' of undefined TypeError: Cannot read property 'combi' of undefined
at Object.jQuery.fn.bind (chrome-extension://libokbfffpaopdjmeofdfpmlanaenaje/js/lib/jquery.hotkeys-0.7.9.min.js:6:8)
at chrome-extension://libokbfffpaopdjmeofdfpmlanaenaje/js/activate_hotkey.js:33:17
at miscellaneous_bindings:288:9
at chrome.Event.dispatchToListener (event_bindings:390:21)
at chrome.Event.dispatch_ (event_bindings:376:27)
at chrome.Event.dispatch (event_bindings:396:17)
at Object.chromeHidden.Port.dispatchOnMessage (miscellaneous_bindings:254:22) event_bindings:380

А если разкоммментить:
Backbone.history.start()
Вот такую :
Uncaught TypeError: Property '$' of object #<Object> is not a function backbone.js:1390
_.extend.start backbone.js:1390
(anonymous function) index.js:29
Error in event handler for 'undefined': Cannot read property 'combi' of undefined TypeError: Cannot read property 'combi' of undefined
at Object.jQuery.fn.bind (chrome-extension://libokbfffpaopdjmeofdfpmlanaenaje/js/lib/jquery.hotkeys-0.7.9.min.js:6:8)
at chrome-extension://libokbfffpaopdjmeofdfpmlanaenaje/js/activate_hotkey.js:33:17
at miscellaneous_bindings:288:9
at chrome.Event.dispatchToListener (event_bindings:390:21)
at chrome.Event.dispatch_ (event_bindings:376:27)
at chrome.Event.dispatch (event_bindings:396:17)
at Object.chromeHidden.Port.dispatchOnMessage (miscellaneous_bindings:254:22) event_bindings:380

torsar
23.04.2013, 10:12
Opera в консоли выводит такое:
Uncaught exception: TypeError: 'Backbone.$' is not a function
Error thrown at line 1390, column 8 in <anonymous function: start>(options) in http://study.loc:8080/js/backbone/hello/js/backbone.js:
Backbone.$(window).on('hashchange', this.checkUrl);
called from line 29, column 0 in http://study.loc:8080/js/backbone/hello/js/index.js:
Backbone.history.start();

da_ff
23.04.2013, 12:56
Сделай пример, который можно посмотреть. Гадать, что у тебя не так очень непросто.

torsar
23.04.2013, 21:29
пример во вложении

torsar
23.04.2013, 21:57
урра
перместил подключение jquery.js
на первое место и заработало
почему так?

torsar
23.04.2013, 22:55
var Start = Backbone.View.extend({
el: $("#start"), // DOM элемент widget'а
events: {
"click #btn": "check" // Обработчик клика на кнопке "Проверить"
},
check: function () {
alert("");

}
});

var start = new Start();
не работает событие представления "check"

torsar
24.04.2013, 22:33
пачему?????????????????????????????????????? ???


[url=]http://jsbin.com/apezek/3/edit (]http://jsbin.com/apezek/3/[/url)

здесь работает (клик по кнопке отрабатывается)
а у меня на компе ни в одном браузере не работает?????????????????????????????????? ??????????????????

torsar
24.04.2013, 23:04
когда скрипт внедрен в body - работает
а когда подключаю тоже самое каак отдельний js - ник не работает
хотя все тоже и файл подключен правильно - пачему ?

torsar
24.04.2013, 23:16
вопрос снят :)

da_ff
30.04.2013, 01:17
Эталонная ветка решения проблемы.

fredrsf
10.12.2013, 12:54
В чем была проблема?