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