backbone.js模型属性在运行时不可用

时间:2013-09-18 17:36:59

标签: javascript ruby-on-rails backbone.js javascript-framework

我的精神束缚结束了......

我正在尝试将视图渲染到包含模型对象属性的屏幕。我能够获取html进行渲染,但模型属性未按预期插入到div中,而是呈现为 undefined

令我如此沮丧的是,当我将视图对象记录到控制台时,我能够检查它并看到正确的模型与它相关联,并且用户的属性确实通过这个存在> &model;属性即可。但是,如果尝试直接在我的代码中访问属性,然后将其记录到控制台,我会得到 undefined

路由器显示操作

show: function(customer_id){
      var customer = new backbone_data.Models.Customer({id: customer_id});
      customer.fetch();
      var customerView = new backbone_data.Views.CustomerView({model: customer});   
      $("#app_container").append(customerView.render().el);
}

在视图类中渲染函数 - 这两个都不起作用

render: function(){
        this.$el.html("<h3>Hello, my age is "+this.model.get('age')+"</h3>");
        return this;
}

template: _.template("<h3>Hello, my age is <%= age %></h3>"),
render: function(){
        this.$el.html(this.template(this.model.attributes));
        return this;
}

显示对象属性的控制台图片 我正在从视图的渲染函数中记录这些,如下所示:

render: function(){
        console.log(this);
        console.log(this.model.attributes.age);
        this.$el.html("<h3>Hello, my age is "+this.model.get('age')+"</h3>");
        return this;
}

您可以从屏幕截图中看到,在控制台中记录视图对象时可以访问age属性,但在我的代码中直接记录它并呈现为 undefined <时,它是未定义 / strong>在视图中。

http://imgur.com/P453dKL

感谢您的帮助!!!!!!!

1 个答案:

答案 0 :(得分:4)

customer.fetch()执行异步请求以填充模型的数据。您的代码会创建视图,并在fetch()之后立即将模型传递给它。试试这个:

customer.fetch({
    success: function(data)
    {
        var customerView = new backbone_data.Views.CustomerView({model: data});   
        $("#app_container").append(customerView.render().el);
    }
});

这应该等到fetch()完成,并确保已检索到您想要的数据。