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()