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

Backbone.Marionette + Rails app redirects after form submission. Why?

我有一个正在开发的示例应用程序,它使用 Ruby on Rails 作为服务器后端,使用 Backbone.Marionette 作为客户端。主要功能是表单到"order a widget"。我正在使用 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 形式。我不会阻止它,也不会至少充分理解它,让它做我想做的事。

如果有帮助,下面是生成表单、等待提交、提交 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()

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