私がデバッグしようとしている問題は、私のバックボーン ビューで、すべてのモデル属性 (名前、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 属性を除く他のすべての属性に対して「未定義」のエラーを返します。
<h1><%=name.first%> <%=name.last%> </h1>//displays correctly
<%=email%> //undefined
//スキーマ
var AccountSchema=new mongoose.Schema({
email:{type:String,unique:true},
password:{type:String},
name:{
first:{type:String},
last:{type:String},
full:{type:String}
},
});
//現在解決済みです。モデルに対して fetch コマンドを実行したのは、render メソッドを呼び出す前ではなく、render メソッドを呼び出した後でしたためです。
これは私のルーターです。ビューが作成された後、ルーターから 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();
});