Chciałbym znaleźć sposób na podniesienie "zdarzenia" backbone.js bez jakiejkolwiek zmiany w modelu lub w domenie.Podnoszenie kręgosłupa.js Zobacz wydarzenie
Na przykład ładuję pakiet SDK Facebooka asynchronicznie. Jestem subskrybentem zdarzenia auth.login i chciałbym wysłać wiadomość do mojego widoku, że użytkownik jest zalogowany, aby mógł ponownie renderować się poprawnie.
Moim zdaniem wygląda podobnie do tego:
window.CreateItemView = Backbone.View.extend({
el: $('#content'),
initialize: function() {
this.render();
},
render: function() {
// do something
return this;
},
setSignedRequest: function(signedRequest) {
//do something with signedRequest
}
});
W moim kodu facebook, robię to:
FB.Event.subscribe('auth.login', function(response){
if (response.status === 'connected') {
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
window.signedRequest = response.authResponse.signedRequest;
if (window.view && window.view.setSignedRequest) {
window.view.setSignedRequest(window.signedRequest);
}
}
});
Jednak podczas window.view istnieje, nie może zobaczyć setSignedRequest metody. Upewniłem się, że moje skrypty ładują się we właściwej kolejności. O dziwo, mam ten sam kod na innej stronie, ale inny obiekt View i działa dobrze. Nie widziałem żadnej różnicy, która by to wyjaśniała.
Lepszym rozwiązaniem byłoby podniesienie jakiegoś zdarzenia i sprawdzenie go w widoku. Jednak nie chcę używać zdarzenia zmiany w modelu, ponieważ wartość signedRequest nie powinna być własnością modelu. Czy istnieje lepszy sposób na osiągnięcie tego?
Cóż, istnieje metoda '.trigger()'. Możesz sprawić, że Twój widok będzie odsłuchiwał niestandardowe wydarzenie, które wyzwolisz później ... –