2015-04-12 46 views
0

我试图使用backbone.stickit库绑定我的表单输入到模型,但似乎无法让模型正确更新。模型不更新表单提交,使用Backbone + Stickit

KeyUp事件似乎正常工作,我可以看到的价值变化,如果我使用“开始”回调来显示它:

bindings: { 
     '#firstName': { 
      observe: 'firstName', 
      onSet: function(val, options) { 
       $('#output').html(val); 
      } 
     } 
    } 

这里是我的代码(Run it on jsfiddle):

HTML

<div id="view"> 
    <form name="form" id="form"> 
     <input id="firstName" type="text"/> 
     <input type="submit" id="submit"/> 
    </form> 
    <div id="output"></div> 
</div> 

的JavaScript

var app = { 

    Model: Backbone.Model.extend({ 
     firstName: 'test' 
    }), 

    View: Backbone.View.extend({ 
     el: "#view", 

     initialize: function(){ 
      this.model = new app.Model(); 
      this.render(); 
     }, 
     bindings: { 
      '#firstName': 'firstName' 
     },   
     render: function(){ 
      this.$el.html(this.template); 
      this.stickit(); 
     }, 
     events: { 
      "submit #form": "submitForm" 
     }, 

     submitForm: function(e) { 
      e.preventDefault(); 
      $('#output').html('output:'+this.model.firstName); 
     } 

    }) 
}; 

var view = new app.View(); 

回答

0

获取模型属性的方式通常不是通过访问属性名称作为对象属性,而是您通过this.model.firstName执行的方式。就我个人而言,我知道很少有这种实施的例子。所谓正确的方法是通过使用get方法: this.model.get("firstName")。 这将返回当前的模型值。

我通常定义getter和setter每次使用模型,所以我会做到以下几点:

getFirstName: function(){ 
    return this.get("firstName"); 
} 

只是看起来更好,更“容易对眼睛” :)(但完全不是必须)

这里是你的小提琴的更新:http://jsfiddle.net/srhfvs8h/1/

+0

非常感谢你,这样做。我不能相信我错过了这一点,使得完美的感觉:-) –