返回的backbone.js模型属性未定义,但调试显示它在控制台中设置

时间:2011-09-07 18:01:30

标签: jquery symfony1 backbone.js

我现在一直在乱用骨干几天而且我想起了一个误解,因为骨干终于在模型中设置了一个属性。我有以下代码:

在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 个答案:

答案 0 :(得分:8)

重点是,Backbone fetch是异步的。要确保attrA有值,请使用success回调:

SampleView = Backbone.View.extend({
  initialize: function() {
    model = new SampleModel();
    model.fetch({success: function(){
        console.log(model.get('attrA')); // Returns new value
    });
  },
});