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 }