
Give Your Apps a Backbone(.js) - joezimjs
http://www.joezimjs.com/javascript/give-your-apps-a-backbone-js/
======
oluckyman
Heads up. AngularJS is getting ready for its 1.0 release after moving this
year from a 20%-time Google developer's project to a well-resourced one with
full-time developers. It's going to really shake this space up.

------
digamber_kamat
YUI3's APP framework is also a good and IMO a better option.

~~~
bmelton
On what grounds do you say that?

Not necessarily disagreeing, I've never used YUI3, but I'd love to hear more
about it.

I've recently been dabbling in Backbone and, frankly, I'm struggling with lack
of documentation. A better documented "competitor" in this space would likely
win me as a user.

I was hoping it would be Ember/Amber, or something to that extent, but that
doesn't appear to be significantly better documented either.

What do you consider YUI's strengths / weaknesses vs. Backbone? (Please say
documentation).

~~~
jashkenas
How would you like the documentation to be improved over the resources that
currently exist at Backbonejs.org?

~~~
bct
"Lack of guidance" is the way I'd describe it. The documentation is great, but
it didn't help to steer me away from making architectural decisions that don't
work well with Backbone when I was doing my first experiments.

~~~
jashkenas
To follow up -- what sort of architectural decisions were those?

~~~
bct
I'll try to think of examples and come back to it tomorrow.

For now: One thing that I'm still not clear on is when to wrap .get/.set.

Should I always write my own getters/setters and only use .get/.set
internally? Right now I'm only wrapping them when the attributes need special
processing, which leads to an inconsistent-feeling API.

~~~
jashkenas
I'd lean towards _never_ , unless you have a case with really special
semantics.

For run-of-the-mill attribute massaging, I'd just define a new method on the
model specifically for that purpose. eg.

    
    
        book.loadFromAmazon(amazonJSON)

~~~
bct
Hmmm, interesting. Here's a concrete example:

I've got an 'Organization' model and a 'Person' model. I want to use them
interchangeably in some templates, so I need to be able to get their names in
a consistent way.

An Organization just has a 'name', but a Person has a 'first_name' and a
'last_name'. I've been using a 'displayName' method to encapsulate the
difference; would it make more sense to do something like:

    
    
        var Person = Backbone.Model.extend({
          initialize: function() {
            var name = this.get('first_name') + ' ' + this.get('last_name');
            this.set({ name: name }, { silent: true });
          }
        });

~~~
crescentfresh
.displayName() seems like a perfect encapsulation IMO.

