Me gustaría encontrar una manera de plantear un "evento" de backbone.js sin que algo haya cambiado en el modelo o en el dom.Levantando un Backbone.js Ver el evento
Por ejemplo, estoy cargando el SDK de Facebook de forma asincrónica. Estoy suscrito al evento auth.login y me gustaría enviar un mensaje a mi punto de vista de que el usuario ha iniciado sesión para que pueda volver a renderizarse correctamente.
Mi punto de vista es similar a esto:
window.CreateItemView = Backbone.View.extend({
el: $('#content'),
initialize: function() {
this.render();
},
render: function() {
// do something
return this;
},
setSignedRequest: function(signedRequest) {
//do something with signedRequest
}
});
En mi código de facebook, hago esto:
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);
}
}
});
Sin embargo, aunque existe window.view, no puede ver el método setSignedRequest. Me he asegurado de que mis scripts se carguen en el orden correcto. Curiosamente, tengo este mismo código en una página diferente, aunque sea un objeto de vista diferente y funciona bien. No he visto ninguna diferencia que explicaría esto.
Una mejor solución sería levantar algún tipo de evento y tener la vista para escucharlo. Sin embargo, no deseo utilizar el evento de cambio en el modelo ya que signedRequest no debe ser una propiedad del modelo. ¿Hay una mejor manera de lograr esto?
Bueno, existe el método '.trigger()'. Podrías hacer que tu vista escuche un evento personalizado, que dispararías más tarde ... –