Brian Cardarella
App.User = Ember.Object.extend({
fullName: function() {
return '' + firstName + ' ' + lastName;
}.property('firstName', 'lastName');
});
var user = App.User.create({firstName: 'Brian', lastName: 'Cardarella'});
user.get('fullName');
=> 'Brian Cardarella'
user.set('firstName', 'Crazy');
user.get('fullName');
=> 'Crazy Cardarella'
Handlebar bindings observe Ember properties for changes and will update the template automatically.
var user = User.create({firstName: 'Brian', lastName: 'Cardarella'});
{{fullName}}
Brian Cardarella
user.set('firstName', 'Crazy');
{{fullName}}
Crazy Cardarella
App.Router.map(function() {
this.resource('users', function() {
this.resource('user', { path: ':user_id' });
});
});
Automatically generates:
Each route automatically generates a controller and expects a template of a particular name.
App.User = DS.Model.extend({
// Attributes
firstName: DS.attr('string'),
lastName: DS.attr('string'),
// Relationships
comments: DS.hasMany('App.Comment')
});
App.User.find(2)
=> user({id: 2, firstName: 'William', lastName: 'Shatner'});
App.User.find({firstName: 'George'});
=> [user({id: 2, firstName: 'George', lastName: 'Washington'}),
user({id: 2, firstName: 'George', lastName: 'Foreman'})]
* already covered in previous slides
class Object < BasicObject; end
class Numeric < Object; end
class Integer < Numeric; end
Ember.CoreView = Ember.Object.extend()
Ember.View = Ember.CoreView.extend()
# reopen the class
class Integer
def my_method
puts 'hey hey hey!'
end
end
# reopen the class
App.User.reopen({
myFunction: function() {
return 'hey hey hey!';
}
});