On 02/01/2012 05:27 PM, Scott Seago wrote:
On 02/01/2012 10:59 AM, Jan Provaznik wrote:
> On 01/31/2012 04:26 PM, ifarkas(a)redhat.com wrote:
>> From: Imre Farkas<ifarkas(a)redhat.com>
>>
>>
https://bugzilla.redhat.com/show_bug.cgi?id=781579
>> ---
>> src/app/controllers/deployables_controller.rb | 8 ++++++
>> src/app/views/deployables/show.html.haml | 33 +++++++++++++++++++++++++
>> src/public/javascripts/backbone/models.js | 10 +++++++
>> src/public/javascripts/backbone/routers.js | 19 ++++++++++++++
>> src/public/javascripts/backbone/views.js | 13 +++++++++-
>> 5 files changed, 82 insertions(+), 1 deletions(-)
>>
>>
>
> ACK
>
> OT note: I'm little bit scared of how much code is duplicated for
> html/backbone views. Would be great to do deeper investigation how to
> optimize this (in post 1.0).
>
> Jan
+1 to this.
On at least two separate occasions I fixed a bug, only to realize that
the problem was "un-fixed" on refresh, since the auto-updated tables are
repopulated via a completely different code path than the original
population.
Also, the refresh code is organized in such a different way than the
controller code that it's hard to connect it (mentally) with the related
controller code to confirm that things are really doing the same thing.
Scott
Imre and I discussed this a few weeks back. This is what we came up with:
1) Extract the views that are needed for client-side rendering to
separate partials.
2) Use Mustache[1] for these views (and keep using HAML for everything
else).
3) There is no step 3.
It would be great if we could just use HAML for everything -- including
client-side rendering, but that doesn't seem to be an option.
Switching from HAML completely towards a templating engine that works
both with Rails and JavaScript seems a bit too much as well. We're quite
invested in HAML and whatever works with JavaScript almost by definition
won't allow using Rails' helper methods from within the views.
Mustache is very simple. It supports almost no logic (basic if/else and
looping over object collections, nothing more). You pass it a Ruby hash
or a JavaScript object and it incorporates the values into the markup.
The overhead of learning/using a second templating engine shouldn't be
too big.
It works under JavaScript and Ruby (the rubygem is in Fedora).
If we limit the Mustache templates only to the pieces that need to be
rendered both in the server and in the browser, it won't get too convoluted.
Thomas
[1]:
http://mustache.github.com/