Created
May 8, 2012 17:16
-
-
Save tjbladez/2637522 to your computer and use it in GitHub Desktop.
basic computed properties in backbone
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Namespace.models.Base = Backbone.Model.extend | |
initialize: ()-> | |
Backbone.Model::initialize @, arguments | |
return if _.isUndefined(@computed) | |
@_computed = {} | |
for attr, dependencies of @computed | |
@on "change:#{attr}", ()=> | |
@_computed[attr] = @[attr].call @ | |
_(dependencies).each (dep)=> | |
@on "change:#{dep}", ()=> | |
@trigger "change:#{attr}" | |
@trigger "change:#{attr}" if @has(dep) | |
get: (attr)-> | |
if @computed?.hasOwnProperty(attr) | |
@_computed[attr] | |
else | |
Backbone.Model::get.call @, attr | |
Namespace.models.Example = Namespace.models.Base.extend | |
computed: | |
fullName: ['firstName', 'lastName'] | |
fullName: ()-> | |
"#{@get('firstName')} #{@get('lastName')}" |
Can you please elaborate?
Here is working fiddle example if you want to fiddle with it: http://jsfiddle.net/Cpn3g/247/
Update: To support initial setting of the models via constructor http://jsfiddle.net/Cpn3g/250/
There are many ways to do it, it's all about pros, cons and personal preferences - to me this seems more complex and doesn't add much value.
I'm not suggesting it doesn't work, however there are a bunch of issues with it:
- Changing the convention of a model (adding extra methods) is something i try to avoid (smells like home brew).
- Adding extra model properties with trailing underscore can have side effects.
- This will throw when you try to `model.set({fullName: 'some random name'});
- In general, I think events are a non issue and we should not bind to computed properties events
Cool, thanks
Greetings,
Here is a small function that implements computed properties for Backbone https://github.com/curran/backboneComputedProperties .
Regards,
Curran
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I'm no a CS guy, so i converted this to javascript.
This doesn't make a lot of sense: