1

我要调试的问题是,在我的主干视图中,所有模型属性(名称、ID、电子邮件等)都是可用的,(我有 console.log() 模型属性来验证这一点),但是,当我渲染通过模型的视图,模板中只有名称属性可用,所有其他属性都未定义,请问有什么我遗漏的,因为这是我的第一个主干应用程序,我花了几个小时尝试调试它并拥有在网上找了很多导师,我的代码似乎是正确的,谢谢

//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),模板中只有名称属性可用,//浏览器对除名称属性之外的所有其他属性给出“未定义”错误

<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 命令

这是我的路由器,我在创建视图后从路由器调用 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();
});
4

0 回答 0