Backbone.Marionette + Rails app在表单提交后重定向。为什么?

时间:2015-06-08 23:51:49

标签: javascript ruby-on-rails forms backbone.js marionette

我有一个我正在研究的示例应用程序,它使用Ruby on Rails作为服务器后端,使用Backbone.Marionette作为客户端。主要功能是“订购小部件”的表单。我正在使用backbone-forms来创建表单。抛弃事物的奇怪之处在于,一旦我提交表单并将模型保存到Rails后端,浏览器就会自动重定向到根URL,并将所有表格参数作为URL参数(例如http://localhost:3000/?quantity=4&color=red&needed_by=2015-06-15T04%3A00%3A00.000Z&kind=Widget+Pro)。此重定向提示Rails在控制器上获取#index方法(这是空白表单,因为这是应用程序的唯一功能)。

对于我的生活,我找不到造成这种情况的原因。我不知道它的Backbone,Marionette还是骨干形式。我不会阻止它,或者至少要理解它,让它做我想做的事情。

如果有帮助,这里是生成表单的代码,等待提交,提交Backbone.Model,然后将其保存到Rails后端:

@WidgetApp.module "Widget.Create", (Create, App, Backbone, Marionette, $, _) ->

  # VIEW
  class Create.Widget extends Marionette.ItemView
    template: "create_widget"

  # Controller
  class Create.Controller extends Marionette.Controller

    initialize: ->
      widget = App.request "new:widget:entity"

      # newView = new Create.Widget
      # App.mainRegion.show newView
      form = new Backbone.Form(
        template: _.template($('#formTemplate').html())
        model: widget
        )
      App.mainRegion.show(form.render())
      # Run validation before submitting
      form.on 'submit', (event) ->
        errs = form.commit({ validate: true })
        if errs
          console.log errs
          event.preventDefault()
        widget.save()

1 个答案:

答案 0 :(得分:2)

尝试将语句event.preventDefault()作为表单submit的事件监听器中的第一个语句。我遇到了同样的问题,在事件监听器的第一行添加相同的语句解决了我的问题。