我试图调试的问题是,在我的骨干视图中,所有模型属性(名称,ID,电子邮件等)都可用,(我有console.log()模型属性来验证这一点),但是,当我渲染通过模型的视图时,模板中只有name属性可用,所有其他属性都是未定义的,请问我有什么遗漏,因为这是我的第一个主干应用程序,我花了好几个小时尝试调试这个并且已经通过网上的许多导师,我的代码似乎是正确的,谢谢
// Backbone视图方法(我已经验证,所有模型值都在这里可用)
var profileView=Backbone.View.extend({
el:$('#content'),
initialize:function(){
this.model.bind('change',this.render,this);
},
render:function(){
var self=this;
this.$el.html(_.template(profileTemplate,this.model.toJSON()));
}
});
// HTML TEMPLATE(profileTemplate),模板中只有name属性可用,//浏览器为除name属性之外的所有其他属性提供'undefined'错误
<h1><%=name.first%> <%=name.last%> </h1>//displays correctly
<%=email%> //undefined
// SCHEMA
var AccountSchema=new mongoose.Schema({
email:{type:String,unique:true},
password:{type:String},
name:{
first:{type:String},
last:{type:String},
full:{type:String}
},
});
//现在已经解决了,发生这种情况是因为我在调用render方法之后而不是在调用render方法之前在模型上执行了fetch命令
这是我的路由器,我在创建视图后从路由器调用model.fetch()。当我在渲染之前
之前调用model.fetch()时,问题就停止了define([''views/profile''],function(,ProfileView){
var router = Backbone.Router.extend({
currentView: null,
socketEvents: _.extend({}, Backbone.Events),
routes: {
'addcontact': 'addcontact',
'index': 'index',
'login': 'login',
'register': 'register',
'forgotpassword': 'forgotpassword',
'profile/:id': 'profile',
'contacts/:id': 'contacts',
"upload/:id":"upload"
},
profile: function(id) {
var model = new Account({id:id});
console.log('profile user:'+id);
this.changeView(new ProfileView({model:model})); //View is created here
model.fetch(); // model is fetched after view is rendered, cause for the problem in my case
}
});
return new router();
});