我的精神束缚结束了......
我正在尝试将视图渲染到包含模型对象属性的屏幕。我能够获取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>在视图中。
感谢您的帮助!!!!!!!
答案 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()
完成,并确保已检索到您想要的数据。