master
 1class csx.Views.My.Cakes.NewView extends Marionette.ItemView
 2  template: JST["templates/my/cakes/new"]
 3  ui:
 4    name: "#cake_name"
 5    category: "#cake_category_id"
 6    save_button: '#save-button'
 7
 8  modelEvents:
 9    'invalid': 'displayError'
10
11  events:
12    "keyup input": "refreshStatus"
13    "change select": "refreshStatus"
14    "submit #new-cake": "save"
15
16  constructor: (options) ->
17    super(_.extend(options, { model: new options.collection.model() }))
18
19  save: (e) ->
20    e.preventDefault()
21    e.stopPropagation()
22    @disableSaveButton()
23    @collection.create(@model,
24      success: @savedSuccessfully
25      error: @couldNotSave
26    )
27
28  onRender: ->
29    @$("#cake_category_id").val($("#cake_category_id option:first").val())
30    @model.isValid()
31
32  savedSuccessfully: (cake) =>
33    window.location.hash = "cakes/#{cake.id}/edit"
34
35  couldNotSave: (cake, xhr) =>
36    @enableSaveButton()
37    error = new csx.Views.ErrorView
38      el: @$('form#new-cake'),
39      attributesWithErrors: $.parseJSON(xhr.responseText)
40    error.render()
41
42  refreshStatus: ->
43    @enableSaveButton()
44    @model.set('name', @ui.name.val())
45    @model.set('category_id', @ui.category.val())
46    @model.isValid()
47
48  displayError: (model, error) ->
49    @disableSaveButton()
50
51  enableSaveButton: ->
52    @ui.save_button.removeAttr('disabled')
53
54  disableSaveButton: ->
55    @ui.save_button.attr('disabled', 'disabled')
56
57  serializeData: ->
58    {
59      cake: @model.toJSON(),
60      categories: csx.Collections.Category.toJSON(),
61    }