javascript - 了解 backbone.js 属性和 toJSON()

标签 javascript backbone.js

我很困惑,需要一些帮助。

我在渲染函数中并且有以下三个调试行:

            console.debug(this.model);
            foo = this.model.toJSON();
            console.debug(foo);

第一行的输出是一个模型实例,其中包含从服务器获取的数据,并且 attributes 属性填充了我所期望的内容。

但是,第二个 console.debug 调用包含一个空对象。

什么给了?调试输出的第二位不应该包含相同的属性但 JSONified 吗?

下面是完整的代码:

    function get_race() {

    var RaceModel = Backbone.Model.extend({
        urlRoot: api_root + 'race/1/?format=json',

    });

    var RaceView = Backbone.View.extend({
        template: _.template('<h1>a template</h1><h2>desc: <%= year %></h2>'),
        initialize: function() {
            this.model = new RaceModel();
            this.model.fetch();
            this.render();
        },
        render: function() {
            console.debug(this.model);
            foo = this.model.toJSON();
            console.debug(foo);
            this.$el.html(this.template(this.model));
            return this;
        }
    });


    var race_view = new RaceView({ el: $("#backbone_test") });

最佳答案

我认为正在发生的事情是在获取模型之前调用渲染。您应该在调用 fetch 之前将其放入 initialize 并删除对 render 的调用。

this.listenTo(this.model, "change", this.render);

当像那样直接调用 render 时,this.model.toJSON() 将返回一个空对象,因为此时那里什么都没有。但是您的调试器将在获取时更新 this.model,因为它正在显示引用。

为了证明这一点,尝试记录一些不可变的东西,比如 console.log(JSON.stringify(this.model));

关于javascript - 了解 backbone.js 属性和 toJSON(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15048167/

相关文章:

javascript - 根据父链接更改图像源?

javascript - 在 Backbone 中渲染下拉菜单

backbone.js - Backbone 允许集合中的重复项

javascript - 如何切换 backbone.js 的模型属性?

javascript - 为什么主干 View 在早期代码之前呈现?

使用 css() 更改背景颜色的 JavaScript 开关

javascript - ESLint 警告 - 在导出为模块默认值之前将箭头函数分配给变量

ruby-on-rails - 咖啡 HAML (.hamlc) 中的部分

javascript - 在 "simultaneous"属性更改时渲染一次

javascript - ' ' 和 ""以及没有引号在 Javascript 中是什么意思?