master
1#= require ./auto_view
2
3class csx.FormView extends csx.AutoView
4 hideErrors: () ->
5 @$(':input').removeClass('is-invalid')
6 @$('.invalid-feedback').html('')
7
8 showError: (field, message) ->
9 @$(field).addClass('is-invalid').siblings('.invalid-feedback').html(message)
10
11 renderErrors: (errors) ->
12 @hideErrors()
13 _.each _.keys(errors), (key) =>
14 @showError(@field(key), errors[key])
15
16 render: ->
17 @renderErrors(@model.validationError)
18
19 onInput: (event) ->
20 $element = $(event.target)
21 @model.set(@fieldNameFor($element), @valueFor($element))
22 @$('input[type=submit]').prop('disabled', !@model.isValid())
23 @render()
24
25 onSubmit: (event) ->
26 if !@model.isValid()
27 @$('input[type=submit]').prop('disabled', true)
28 event.preventDefault()
29 event.stopPropagation()
30 @render()
31
32 valueFor: (element) ->
33 if element.is(':checkbox')
34 element.prop('checked')
35 else
36 element.val()
37
38 fieldName: (name) ->
39 return name if _.isEmpty(@modelKey)
40 "#{@modelKey}_#{name}"
41
42 field: (name) -> @$("##{@fieldName(name)}")
43 fieldNameFor: (element) -> element.attr('id').replace("#{@modelKey}_", '')