master
 1#= require views/my/cakes/thumbnail_view
 2
 3class csx.Views.My.Cakes.EditView extends Marionette.CompositeView
 4  template : JST["templates/my/cakes/edit"]
 5  childView: csx.Views.My.Cakes.ThumbnailView
 6  childViewContainer: '.card-columns'
 7  ui:
 8    name: "#cake_name"
 9    description: "#cake_story"
10    category: "#cake_category_id"
11    tags: "#cake_tags"
12    save_button: '#save-button'
13
14  modelEvents:
15    'invalid': 'displayError'
16
17  events :
18    "keyup input": "refreshStatus"
19    "change select": "refreshStatus"
20    "submit #edit-cake" : "update"
21    "click .add-photo": "launchAddPhoto"
22
23  constructor: (options) ->
24    super(options)
25    @collection = @model.photos()
26
27  update : (e) ->
28    e.preventDefault()
29    e.stopPropagation()
30    @disableSaveButton()
31    @model.save(null,
32      success: @savedSuccessfully
33      error: @couldNotSave
34    )
35
36  onRender: ->
37    @$("#cake_category_id").val(@model.category_id())
38    @ui.tags.tagit({ availableTags: csx.Collections.Tag.pluck('name') })
39    @disableSaveButton()
40
41  savedSuccessfully: (cake) =>
42    window.location.hash = "cakes/#{cake.id}"
43
44  couldNotSave: (cake, xhr) =>
45    @enableSaveButton()
46    error = new csx.Views.ErrorView
47      el: @$('form#edit-cake'),
48      attributesWithErrors: $.parseJSON(xhr.responseText)
49    error.render()
50
51  refreshStatus: ->
52    @enableSaveButton()
53    @model.set('name', @ui.name.val())
54    @model.set('story', @ui.description.val())
55    @model.set('category_id', @ui.category.val())
56    @model.set('tags', @ui.tags.val())
57    @model.isValid()
58
59  displayError: (model, error) ->
60    @disableSaveButton()
61
62  enableSaveButton: ->
63    @ui.save_button.removeAttr('disabled')
64
65  disableSaveButton: ->
66    @ui.save_button.attr('disabled', 'disabled')
67
68  serializeData: ->
69    {
70      cake: @model.toJSON(),
71      categories: csx.Collections.Category.toJSON(),
72    }
73
74  launchAddPhoto: ->
75    @displayModal(new csx.Views.Photos.NewModalView(cake: @model))
76
77  displayModal: (view) ->
78    $("#modal").html(view.render().el)
79    $("#modal").modal()