2013-02-13 25 views
17

Mam formularz jak ten na mojej stronie:Weird przekierowanie za pomocą danych-wiążą przedstawienia, sammy.js i knockout.js razem

<form data-bind="submit: AddFolder"></form> 

Jeśli mam ten kod w moim skryptu JS (oczywiście I” już usunięte wszystkie niepowiązanego kodu i przetestowane, aby upewnić się, że nadal mogę odtworzyć tylko z tego kodu, zwykle będziesz mieć więcej kodu wewnątrz tu jak .get i .post funkcji):

Sammy(function() { 
}).run(); 

Gdy forma jest przesłany, strona przekierowuje do dziwnego adresu URL, takiego jak ?ko_unique=1

Jeśli usunę część Sammy z mojego skryptu, tak się nie stanie. Myślę, że ma to coś wspólnego z propagacją zdarzeń, a Sammy i Knockout zarówno podpinają onSubmit, jak i przeglądarką tylko z uwzględnieniem zwracanej wartości z ostatniej wywołanej funkcji.

+0

Dla mnie przynajmniej pole, które dodało, to ko_unique_1 = true, fakt, który przyniosłem tylko dlatego, że go przeglądałem i nic nie wymyśliłem. Gdyby ta strona powiedziała, rozwiązałbym ten problem kilka dni temu! –

Odpowiedz

48

Po długich poszukiwaniach, a nie znajdując żadnej odpowiedzi tutaj na SO, skończyło się znalezieniem to:

https://groups.google.com/forum/?fromgroups#!topic/sammyjs/EYW-2Ygk3z8

i modyfikowane mój kod to:

Sammy(function() { 

    // Override this function so that Sammy doesn't mess with forms 
    this._checkFormSubmission = function(form) { 
     return (false); 
    }; 

}).run(); 

Więc Sammy nigdy próbuje zrobić coś specjalnego, gdy formularz zostanie przesłany na moją stronę. Ponieważ używam Knockout, nie planuję używać Sammy do żadnych formularzy. Jeśli chcesz bardziej złożonego kodu lub wersji wtyczki, możesz zobaczyć powyższy adres URL, ale dla mnie i podejrzewam, że większość z nich używa KO, jest to mniej kodu i łatwiej jest po prostu wyłączyć tę funkcję Sammy.

+0

Yup. Po prostu zabiłam kilka godzin zastanawiając się, dlaczego moje zgłoszenie formularza działa zgodnie z oczekiwaniami z nokautem, ale wyniki całkowicie zniknęły, gdy tajemnicza nowa ścieżka (katalog główny mojej domeny) została zastosowana jako lokalizacja, a trasa sammy związana z "przejęciem". Yikes. –

+1

samo tutaj, zajęło by wiele godzin, aby to śledzić, thx za opublikowanie rozwiązania. czystym sposobem na zrobienie tego jest prawdopodobnie zawijanie tego do wtyczki sammy zgodnie z sugestią w jednym z ostatnich postów grupy google. – philipphoffmann

+3

THANKKKK YOUUU !!!!! –