У меня есть пример приложения, над которым я работаю, который использует 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 + Rails приложение перенаправляет после отправки формы. Зачем?
В течение жизни я не могу найти причину этого. Я не знаю, есть ли его Магистраль, Марионеточная или базовая форма. Я не стану его останавливать или, по крайней мере, недостаточно хорошо понимаю, чтобы заставить его делать то, что я хочу.
Если это помогает, вот код, который генерирует форму, ждет представления, обязывает 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'? Является ли это проблемой «базовых форм» или более общей? Я просто хочу понять, почему ** это работает. – smargh
@smargh На самом деле браузер добавляет все данные формы в url и перенаправляет на него, если в теге формы html не определен метод формы, предполагающий, что метод по умолчанию - это метод GET.So event.preventDefault() предотвращает это поведение по умолчанию. –