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

Converting Backbone model to JSON set default values

这是我的 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())
    );
}

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

您需要将您的 stock.toJSON() 放入 fetch 的回调中。 Fetch 是异步的,因此在您调用 stock.toJSON() 之前,您的服务器的值不会加载。此时,默认值仍设置为 stock,而不是您从服务器加载的值。

尝试...

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