将Backbone模型转换为JSON设置默认值

时间:2015-02-20 15:11:27

标签: json backbone.js underscore.js

这是我的Backbone模型代码,我设置了默认值。

App.Models.Stock = Backbone.Model.extend({
    defaults: {
        name:       '',
        quantity:   0,
        booked:     0,
        minimum:    0,
        active:     1
    },
    urlRoot: '/stock/'
});

这是我的Backbone视图代码,我在等待按钮点击。

templateItem: _.template($('#stockItem').html()),
events: {
    'click #openStock': 'showStock'
},
showStock: function(e) {
    var stock = new App.Models.Stock({
        id: $(e.currentTarget).data('id')
    });
    stock.fetch();
    $('#sidebar').empty().append(
        this.templateItem(stock.toJSON())
    );
}

问题在于,当我们获取模型时,服务器返回正确的结果,但是当我尝试将其转换为JSON时,Backbone为模型设置了默认值!为什么会这样?我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

您需要将stock.toJSON()置于fetch的回调中。 Fetch是异步的,因此在您致电stock.toJSON()之后才会加载服务器中的值。此时,默认值仍设置在stock上,而不是从服务器加载的值。

...试

stock.fetch({
    success: function() {
        $('#sidebar').empty().append(
            this.templateItem(stock.toJSON())
        );
    }
});