Професионална програма
Loading...
+ Нов въпрос
Barish avatar Barish 8 Точки

Sammy.js problem with redirection when using post

Когато искам да post-на ме прехвърля към localhost и губи пътя до index.html

app.router = Sammy(function () {
var selector = '#wrapper';

this.get('#/allBooks', function () {
controller.loadAllBooks(selector);
});
});

app.router.run('#/allBooks');

а това ми е формата

<div id="form">
<label for="author">Title:</label>
<input id="title" type="text"/>
<label for="title">Author:</label>
<input id="author" type="text"/>
<label for="isbn">Isbn:</label>
<input id="isbn" type="text"/>
<button type="submit" id="add">Add</button>
</div>

Като цъкна на бутона Add обекта се записва в базата данни обаче се губи пътя и ми дава 404 not found.
Ако ми помогнете ще съм много благодарен :)
Тагове:
0
JavaScript Applications
Barish:
Проблемът е решен
quickben avatar quickben 974 Точки

Някъде трябва да кажеш да се вземат данните от базата и наново да се покажат в страницата когато се натисне бутона, немога да ти помогна по-конкретно, че всеки ползва MV ****** :) 

Ако постнеш целия код някой може да ти помогне, аз немога в момента.

0
26/04/2015 22:55:17
a.angelov avatar a.angelov 1317 Точки

Направи го с input type="button", а не с button type="submit" и махни формата. 

0
27/04/2015 00:00:38
Barish avatar Barish 8 Точки

пак така пак записва в бд ама не го изкарва губи пътя и не ми намира темплейта за mustashe.js

0
dinkoslav avatar dinkoslav 123 Точки

Привет Бариш,

отдавна не сме се чували :)

Тa: във формата ти има един method="#/addBooks" - не ти е нужен. Формата тук не прави конкретните заявки и не ги определя!!! Имаш requester за тая работа (в твоя случай е в bookModel).

След това имаш ViewFactory.prototype.renderBook и явно имаш надежди това нещо да ти добави новия запис и да изчисти формата чрез която добавяш. Въпроса ми е : защо?

Имаш си ViewFactory.prototype.generateAddBookView, което го прави, а Controller.prototype.loadAllBooks го извиква.

Защо просто в Controller.prorotype.addBook, след като си направиш post заявката, при success да не се извика функцията loadAllBooks? Тя върши същата работа! Единствения ти проблем е, че нямаш достъп до selector-a, но след като го прехвърлиш като променлива от View-Factory (controller.addBook(author, title, isbn, SELECTOR)), всичко се оправя.

Другото което ми прави впечатление и не знам колко ще съм прав ... var _this = this; ... това се използва когато правиш някакви event handlers, защото this не е контролера и по този начин го запазваш. Когато правиш прототип на функция - това не ти е нужно (или поне на мен не ми се е налагало). Може и да се лъжа, но такива са ми наблюденията.

Успех и малко си подреди кода ;)

Динко

 
0
AleksandurSeferinkin avatar AleksandurSeferinkin 335 Точки

Грешно подхождаш с пращането на данните. Всяка форма има submit евент.

$( "form" ).on("submit", function(e) {
   e.preventDefault();
   e.stopPropagation();
});

 

Тук има 2 важни стъпки, които трябва да са най-отгоре:

e.preventDefault() - това премахва default поведението на формата, което е да праща обикновена пост заявка към даден адрес. По този начин спираш рефрешването и можеш пращаш AJAX заявка.

e.stopPropagation() - Чувал си за "event bubbling", нали? SammyJS слуша за евенти от формите и се получава това с изтриването на URL-a. С тази малка функция ще му попречим да хване този "submit" евент и URL-a ще остане непокътнат.

По този начин ще имаш семантичен html с <button type="submit"> и няма да се случва нищо друго освен това, което си сложил в callback-a на евента. :)

1
27/04/2015 00:31:55