Атрибут модели Backbone.js возвращается неопределенным, но отладка показывает, что он установлен в консоли - PullRequest
2 голосов
/ 07 сентября 2011

Я уже пару дней работаю с магистралью, и думаю, что возникло недоразумение в том порядке, в котором магистраль, наконец, устанавливает атрибут в модели. У меня есть следующий код:

Внутри файла model.js -

SampleModel: Backbone.Model.extend({
  urlRoot: 'a url',
  defaults: {
    attrA: 'value',
  },
  initialize: function() {
    // init of model relationships
  },
  parse: function(response) {
    this.set({attrA: response.attrAUpdateValue});
  },
});

Внутри файла view.js -

SampleView = Backbone.View.extend({
  initialize: function() {
    model = new SampleModel();
    model.fetch();

    console.log(model.get('attrA')); // Returns 'value' from default.
    console.log(model.attributes); // Inspect the attributes for the model and see that attrA does not have updated value.
  },
});

Как я могу убедиться, что значение attrA имеет значение при работе в представлении вне привязки модели к изменению для работы с attrA? Или это способ думать об этом в области магистрали? Делать что-то с моделью, как только атрибут изменился?

Заранее спасибо за помощь.

ОБНОВЛЕНИЕ : Моя ошибка, я соответственно обновил комментарии, до того как я сказал, что первый журнал консоли будет содержать неопределенное значение. Следует указать, что это значение по умолчанию, а не ожидаемое обновленное значение, которое должно было быть установлено во время действия синтаксического анализа.

1 Ответ

8 голосов
/ 08 сентября 2011

Дело в том, что Backbone fetch является асинхронным.Чтобы убедиться, что attrA имеет значение, используйте success callback:

SampleView = Backbone.View.extend({
  initialize: function() {
    model = new SampleModel();
    model.fetch({success: function(){
        console.log(model.get('attrA')); // Returns new value
    });
  },
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...