Mi piacerebbe trovare un modo per generare un "evento" backbone.js senza che qualcosa sia cambiato nel modello o nel dom.Raising a Backbone.js Visualizza evento
Ad esempio, sto caricando l'SDK di Facebook in modo asincrono. Sono iscritto all'evento auth.login e desidero inviare un messaggio alla mia vista che l'utente abbia effettuato l'accesso in modo da poter eseguire nuovamente il rendering in modo appropriato.
mio punto di vista è simile a questo:
window.CreateItemView = Backbone.View.extend({
el: $('#content'),
initialize: function() {
this.render();
},
render: function() {
// do something
return this;
},
setSignedRequest: function(signedRequest) {
//do something with signedRequest
}
});
Nel mio codice facebook, faccio questo:
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);
}
}
});
Tuttavia, mentre esiste window.view, non può vedere il metodo setSignedRequest. Mi sono assicurato che i miei script stiano caricando nell'ordine corretto. Stranamente ho lo stesso codice su una pagina diversa anche se un oggetto View diverso e funziona perfettamente. Non ho visto alcuna differenza che spiegherebbe questo.
Una soluzione migliore sarebbe sollevare qualche tipo di evento e avere la vista di ascoltarlo. Tuttavia, non voglio utilizzare l'evento change sul modello poiché la richiesta firmata non deve essere una proprietà del modello. C'è un modo migliore per realizzare questo?
Bene, c'è il metodo '.trigger()'. Puoi fare in modo che la tua vista ascolti un evento personalizzato, che avresti attivato in seguito ... –