表单提交事件中的骨干模型

时间:2017-01-04 17:36:37

标签: backbone.js underscore.js

似乎this.model在表单提交事件函数中返回一个undefined,即使在我执行_bindall()之后也是如此。渲染功能正常。

initialize: function() {
  _.bindAll(
    this, 
    "render", 
    "processFormEditJobSubmit"
  );
},

表单提交事件:

processFormEditJobSubmit: function(e) {  
  e.preventDefault();
  e.stopImmediatePropagation();
  console.log(this.model); //undefined
}

如何解决这个问题?或者我对绑定做错了吗?我会在sessionStorage中序列化模型并在submit函数中反序列化它。我宁愿避免黑客入侵我的代码。谢谢你的任何指示。

1 个答案:

答案 0 :(得分:0)

您显示的代码中没有错误,但示例不完整,这是一个正常工作的代码段:

var MyView = Backbone.View.extend({

  el: '#view',

  events: {
    'click button.a': 'processFormEditJobSubmit'
  },

  initialize: function() {
    _.bindAll(
      this,
      "render",
      "processFormEditJobSubmit"
    );
  },
  
  render: function() {
    this.$('button.b').click(this.processFormEditJobSubmit);
  },

  processFormEditJobSubmit: function(e) {
    e.preventDefault();
    e.stopImmediatePropagation();
    console.log(this.model.get('prop')); //not undefined
  }

});

new MyView({
  model: new Backbone.Model({prop: 'here'})
}).render();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>

<div id="view">
  <button class="a">
    event hash
  </button>
  <button class="b">
    jquery handler
  </button>
</div>

如果有什么我错过了,请说明,我会更新代码段。