2011-09-28 13 views
5

Odziedziczyłem aplikację opartą na szkielecie. Bardzo lubię kręgosłup i dopiero zaczynam o tym myśleć. Z mojego zrozumienia, kiedy model.save jest wywoływany na nowym obiekcie, powinien umieścić go na serwerze, serwer powinien zwracać to samo json, ale z identyfikatorem alloted i szkielet powinien utrzymywać ten identyfikator dla modelu, aby dalej zapisywać wyniki w PUT z identyfikatorem aktualizacji.backbone.js model.save nie ustawił identyfikatora

Jednak, gdy zadzwonię pod numer model.save(), a następnie spróbuję pobrać właściwość model.id, będzie to wartość pusta.

Czy to dlatego, że nie robię tego z oddzwonieniem? Więc nieruchomość nie została jeszcze ustalona?

Jak ustawić oddzwonienie sukcesu? dzwonienie pod numer model.save({success: function(){...}}) nie działa?

tutaj jest rzeczywista wezwanie:

model.save(null, { 
    success: function() { 
     alert('success'); 
    }, 
    error: function() { 
     alert('error'); 
    } 
}); 
+0

Czy próbowałeś ustawić zwrotnego o błędzie zbyt? – mamoo

+0

yeah - ani się nie nazywa – iwayneo

+0

czy zweryfikowaliście, że serwer rzeczywiście został wywołany? – timDunham

Odpowiedz

4

Coś czuje dziwne na ten temat. Ustawienie silent: true powoduje tylko, że żadne z wydarzeń nie zostanie zwolnione. Wszystko inne powinno się zdarzyć normalnie. Innymi słowy, nie zakładaj, że ustawienie slient: true jest właściwą odpowiedzią tutaj ...

Podejrzewam, że faktycznie rzucasz wyjątek w pewne miejsce (prawdopodobnie z sprawdzaniem poprawności lub coś podobnego) i jakoś ustawienie silent: true powoduje wszystko przepływać.

Sugerowałbym, żebyś usunął tę opcję i sprawdził konsolę lub uruchom z debuggerem ... Podejrzewam, że masz jakiś błąd, który czai się w tym miejscu.

Kilka sugestii: Spójrz na funkcję annotated source dla funkcji model.set. Zostanie wywołana przed wywołaniem twojego oddzwonienia success. Wewnątrz tej funkcji jest kilka rzeczy, które się zdarzą, jeśli silent jest fałszywa. Należą do nich: validation, indywidualne wyzwalacze property change i wyzwalacz . Założę się o pieniądze, że albo walidacja się nie powiedzie, albo coś, co nasłuchuje zmian, rzuca wyjątek.

+0

OK Zajrzę rano i zgłoś się ponownie :) – iwayneo

+0

Co było przyczyną problemu? –

0

musiałem ustawić cichy: true na zapisać:

model.save(null, { 
     silent: true, 
     success: function() { 
      alert('success'); 
     }, 
     error: function() { 
      alert('error'); 
     } 
    }); 
+1

Hmmmm ... Podejrzewam, że to nie jest przypadkowa poprawka, ale w ten sposób ukrywasz błąd w kodzie. Spójrz na moją odpowiedź. –

0

miałem ten sam problem, okazało się, ponieważ mój zwyczaj parse została braku

Powiązane problemy