【问题标题】:Backbone.Marionette + Rails app redirects after form submission. Why?Backbone.Marionette + Rails 应用程序在提交表单后重定向。为什么?
【发布时间】:2015-08-23 14:40:45
【问题描述】:

我正在开发一个示例应用程序,它使用 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.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()

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这实际上让我找到了解决方案,非常感谢你,但我仍然有点困惑为什么这能解决问题。此功能“防止”的“默认”是什么? event 对象是什么?这是backbone-forms 的具体问题,还是更笼统的问题?我只是想更好地理解为什么这行得通。
    • @smargh 实际上浏览器将所有表单数据附加到 url 并重定向到它,如果在 html 的表单标记中没有定义表单方法,假设默认方法是 GET 方法。所以 event.preventDefault()防止这种默认行为。
    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    相关资源
    最近更新 更多