

Backbone.js adds Controllers and History - raganwald
http://documentcloud.github.com/backbone/#Controller

======
jashkenas
If you were previously looking at integrating Backbone.js with Sammy, jQuery-
BBQ, or another hashchange-based library, there's no longer any need. Instead:

    
    
        var Workspace = Backbone.Controller.extend({
    
          routes:{
            "search/:query/p:page": "search",
            "folder/:name":         "openFolder",
          },
    
          search: function(query, page) {
            ...
          },
    
          openFolder: function(name) {
            ...
          }
    
        });
    

Which will properly route URLs like "example.com/#search/lemons/p7"

~~~
cpr
Just a nit: is that "search/:query/:page"?

~~~
bergie
Actually, why use colons instead of URI templates?

<http://tools.ietf.org/html/draft-gregorio-uritemplate-04>

~~~
jashkenas
Hey, that's a great idea. I've been following the progress of that draft a
good bit, and we're already using URI-templates as part of the DocumentCloud
API...

    
    
        "image":"http://s3.dcloud.org/docs/101/pages/inauguration{page}-{size}.gif"
    

I'd be a bit concerned if we used them in Backbone, that we wouldn't be
following the spec by parsing all variants of the expansions -- but on
balance, it's probably a great thing to do.

~~~
bergie
Cool. We use a URL patterns variant in Midgard MVC, so that should make
Backbone integration easier :-)

<http://github.com/bergie/midgardmvc_core>

------
jwr
I am refactoring my application to use Backbone.js right now and just wanted
to thank Jeremy for this great piece of code (as well as underscore.js). There
is still some friction in certain places, but overall the experience has been
great and my app has been seriously despaghettized.

So, thanks!

------
niels
I refactored my app using Backbone.js, and it really hits the sweetspot in
terms of being lightweight and flexible. I really like how view objects,
collections and models abstractions are so simple, yet fit so well together
(change:attribute events etc...) Until now I also used jaskenas HashHistory
snippet for routing...

------
bdr
I'm already using Backbone in production. It has been a huge boon, not only in
time saved but in forcing me to design things well.

------
moe
I'm not sure I like the way this is going.

A large part of jQuery's appeal is its modularity. The address-plugin already
exists and seems to do the job very well.

In that spirit I'd prefer to see backbone stay as modular as possible, too,
and have it integrate with existing, mature solutions, rather than grow its
own knockou^Wknockoffs.

~~~
jashkenas
Modularity is great, but you don't need to worry about the way this is going.
The _entirety_ of Backbone.js is still fewer lines of code than just the
jQuery Address plugin. ;)

Now that there is a bit more client-side-only code, in the next release, we'll
probably split the source into individual components, so that you can just
load Models and Collections on the server-side.

~~~
moe
Yes, I didn't mean to dismiss backbone as a whole by any means. It's in fact
on my "try asap" list (still undecided whether backbone or knockout is the way
to go).

With modularity I don't strictly mean LOC. Rather I think that most of these
lines in the address plugin are probably in there for a good reason. Thus if
backbone ships its own solution to the problem, but that solution covers only
part of what I need, then I'd have to integrate _both_ \- and perhaps deal
with conflicts. That would be undesirable.

On the other hand I recognize that introducing dependencies to specific other
plugins is _also_ undesirable. I'm a bit torn about which is the lesser evil
here.

~~~
jashkenas
If the solution only covers part of what you need, then that is indeed a
problem that should be fixed ... by covering all of what you need.

On the other hand, I'll leave it up to your judgement whether the lines in the
address plugin are necessary. You can compare implementations here:

[https://github.com/asual/jquery-
address/blob/master/src/jque...](https://github.com/asual/jquery-
address/blob/master/src/jquery.address.js)

[http://documentcloud.github.com/backbone/docs/backbone.html#...](http://documentcloud.github.com/backbone/docs/backbone.html#section-77)

If 90% of Backbone apps end up using Controllers, it's better to include a
concise implementation than a heavy dependency, I think.

------
steilpass
Is there a mobile widget library for backbone.js?

~~~
arnklint
Why not plug in jquery mobile or some other mobile framework?

~~~
steilpass
Because jqmobile doesn't provide an mvc like framework.

~~~
pingvingryta
There should not really be a problem with using Backbone.js and jQuery Mobile
together.

~~~
steilpass
Sounds strange to me. How does jQueryMobile pages relate to Backbone.js views?
Do you have an example?

