2014-10-18 75 views
0

我正在尝试更新每个关键事件的模型。该模型的属性将用于模板中。所以他们应该在页面加载之前定义。我已经定义他们null。但是当输入内容时,我无法从控制台读取它们。在骨干应用程序中使用关键事件更新模型

这样做的正确方法是什么?我的缺点是什么?

loginview片段:

events: { 
      'keyup input' : 'updateModel', 
      'click #loginbutton' : 'login', 
      'click #renderregisterbutton' : 'render_register', 
     }, 
     updateModel: function(e){ 
      e.preventDefault(); 
      var elm = e.target; 
      FormsDataModelInst[ elm.id ] = $(elm).val(); 
      this.model.set(FormsDataModelInst); 
      console.log("1-FormsDataModelInst:" + JSON.stringify(FormsDataModelInst.attributes)); 
      console.log("2-this.model.set(...):" + JSON.stringify(this.model.attributes)); 
      console.log(e); 
      console.log(e.target); 
      console.log(elm); 
      console.log(elm.id); 
      console.log($(elm).val());    
     }, 

formsdatamodel:

define([ 
    'underscore', 
    'backbone', 
    ], 
    function(_, Backbone) { 
     var FormsDataModel = Backbone.Model.extend({ 

      urlRoot: null, 

      defaults: { 
       username: null, 
       phone: null, 
       email: null, 
      }, 
     }); 

     return new FormsDataModel(); 
}); 

回答

0
线

应使用的

 FormsDataModelInst.set(elm.id, $(elm).val()); 

代替线

 FormsDataModelInst[ elm.id ] = $(elm).val(); 

这解决了这个问题。像set()一样使用骨干的utilitess和其他模型一样被设置和保存等。FormsDataModelInst的模型也是一个Backbone模型。