Вызов события View Backbone.js

Я хотел бы найти способ вызвать "событие" backbone.js без каких-либо изменений в модели или в dom.

Например, я загружаю SDK Facebook асинхронно. Я подписан на событие auth.login и хотел бы отправить на свое представление сообщение о том, что пользователь вошел в систему, чтобы оно могло соответствующим образом повторно отобразить себя.

Мое представление выглядит примерно так:

window.CreateItemView = Backbone.View.extend({
  el: $('#content'),
  initialize: function() {
    this.render();
  },
  render: function() {
    // do something
    return this;
  },
  setSignedRequest: function(signedRequest) {
    //do something with signedRequest
  }
});

В моем коде facebook я делаю следующее:

  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);
      }
    }
  });

Однако, пока существует window.view, он не может видеть метод setSignedRequest. Я убедился, что мои скрипты загружаются в правильном порядке. Как ни странно, у меня есть тот же код на другой странице, хотя и с другим объектом View, и он отлично работает. Я не видел никакой разницы, которая могла бы это объяснить.

Лучшим решением было бы вызвать какое-то событие и заставить представление его прослушивать. Однако я не хочу использовать событие изменения в модели, поскольку signedRequest не должен быть свойством модели. Есть ли лучший способ добиться этого?

17
задан James 19 February 2012 в 16:03
поделиться