2015-06-08 3 views
0

У меня есть пример приложения, над которым я работаю, который использует 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() 

ответ

2

Попробуйте сделать заявление event.preventDefault() в качестве первого оператора в случае слушателя формы submit.I имел ту же проблему, добавляя тот же оператор в первой строке прослушивателя событий, решил мою проблему.

+0

Это действительно привело меня к решению, так что спасибо за тонну за это, но я все еще немного смущен, почему это решает проблему. Что такое «по умолчанию», который эта функция «предотвращает»? Что такое объект 'event'? Является ли это проблемой «базовых форм» или более общей? Я просто хочу понять, почему ** это работает. – smargh

+1

@smargh На самом деле браузер добавляет все данные формы в url и перенаправляет на него, если в теге формы html не определен метод формы, предполагающий, что метод по умолчанию - это метод GET.So event.preventDefault() предотвращает это поведение по умолчанию. –

Смежные вопросы