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 事件侦听器中的第一条语句,遇到同样的问题,在事件侦听器的第一行添加相同的语句解决了我的问题。
我有一个正在开发的示例应用程序,它使用 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 事件侦听器中的第一条语句,遇到同样的问题,在事件侦听器的第一行添加相同的语句解决了我的问题。