Want to see the full-length video right now for free?
Since we've gone through all this trouble to never actually leave the page, why are we going through even more trouble to make it look like we are?
First let's make things look more appropriate.
We'll start by creating a style sheet at app/assets/stylesheets/notes.css.scss
Add a definition for the note class
.note { width: 225px; heigth: 225px; margin: 20px; float: left;
border: 1px solid black; padding: 10px;
list-style: none; }
Next remove all the content from the show.jst.eco template
title-container
Ensure the existing classes remain on both input elements
Now we return to our new style sheet
Add a definition for the title container class under the note
.title-container { height: 25px;
margin-bottom: 10px;
border-bottom: 1px solid black;
.note-title {
font-size: 17px;
font-weight: bold;
}
}
Remove background and border for both inputs within a note
Also remove outline on :focus
input[type=text], textarea {
border: none;
background: none;
&:focus {
outline: none;
}
}
Add a definition for the body
Add a definition for title-content
.body {
width: 100%;
height: 165px;
.note-content {
width: 100%;
height: 100%;
resize: none;
}
Open the ShowNote Backbone view
save
method, which grabs the title and body from the input
elementsBind a change
event with no target to that method
class App.Views.ShowNote extends Backbone.View template: JST['notes/show']
className: 'note'
events: 'change': 'save'
render: -> @$el.html(@template(note: @model)) this
save: -> @model.set title: @$('.note-title').val() content: @$('.note-content').val() @model.save() false
Title is a single line so it should save and blur when enter is pressed
Create a method called blurIfEnter
and bind it to the keydown
event
events:
'change': 'save'
'keydown .note-title': 'blurIfEnter'
keyCode 13 means the enter button was pressed
blurIfEnter: (e) -> if e.keyCode == 13 @$(':input').blur()
To improve user experience let's make it clear what is being edited
On focus of both of our note inputs bind an event called beginEditing
On blur of both of our note inputs bind an event called endEditing
events: 'change': 'save' 'keydown .note-title': 'blurIfEnter' 'focus .note-title, .note-content': 'beginEditing' 'blur .note-title, .note-content': 'endEditing'
Add the begingEditing
method
Add a class called editing to the input that comes in focus
beginEditing: -> @$el.addClass('editing')
Add the endEditing
method
Remove the class called editing from the input that goes out of focus
endEditing: -> @$el.removeClass('editing')
Open the show.jst.ceo file
Add a save button with a class of save
Open the notes.css.scss file
Add a blue border to the note when the editing class is present
.footer { display: none; }
&.editing { border-color: blue;
.footer { display: block; } }
Because of our recent change we can remove the following files and code:
We also need to change the initialize method in our ScratchPad
class to render the Notes
view which
was previously done in the index router.