Привязать подмодель для просмотра в позвоночнике / марионетке

У меня есть модель User, которая имеет модель BankAccount, и у меня есть представление, для атрибута модели которого задана модель User, и в шаблоне этого представления я ссылаюсь на атрибут банковского счета:

<%= bankAccount.get('description') || 'No linked account' %>

Если я обновил банковский счет, то представление не обнаружит изменения:

user.get('bankAccount').set('description', 'foobar')

Я попытался добавить следующее в инициализации на модели User, но это тоже не сработало.

initialize: function() {
  var self = this;

  this.on('change:bankAccount', function() {
    self.get('bankAccount').bind('change', function() {
      self.trigger('change');
    });
  });
}

Какие-либо предложения? Кроме того, обе эти модели используют магистральный реляционный, если это помогает.

2 ответа

Решение

Ваше мнение подписаться на description изменить событие в модели BankAccount и выполнить повторную визуализацию

UserView = Backbone.View.extend({
  initialize: function() {
    this.model.get('bankAccount').on('change:description', this.render, this);
  }
});

Из Backbone-реляционных событий вы увидите, что вы можете привязать к update:<key> и далее ниже есть пример (который я копирую / вставляю ниже) о том, как слушать изменения / обновления на HasMany а также HasOne связи

// Use the 'update' event to listen for changes on a HasOne relation 
// (like 'Person.livesIn').
paul.bind( 'update:livesIn', function( model, attr ) {
    console.debug( 'update to %o', attr );
});
Другие вопросы по тегам