Hacker News new | ask | show | jobs
by paulca 5476 days ago
Given that I really don't have any practical experience using whenever.js (it's literally days old) my "argument", is that jQuery tends to be very syntax heavy.

eg. jQuery('a#click-me').click(function(){ $(this).text('Clicked!') })

... there's a lot of cognitive work going on here. Not only am I parsing javascript, as a coder, I'm parsing the CSS of the selector, and creating a mental model of the anonymous function. It's not to say that this is necessarily a bad thing, just that there's a lot of extra syntax to handle.

whenever("Click Me!").is('clicked').then('change it to "clicked"')

...reads without all of the extra syntax, but it still remains valid javascript.

> you'd have to look at three different places to understand what the code is _actually_ doing

This is a fair point, but I would argue that for most code you read, there's typically nowhere to go to find out the _intent_, which for me is really the most important thing. I think it's fascinating to be able to have "executable intent" ...

... but since I don't really have any real world experience using this, I can't really back up my arguments with any real data ... just the motivations I had to write this!

1 comments

Here's what you can do without using whenever that addresses your issue, and possibly others'. As far as I can tell what people don't like is the inlined function. You can get rid of that and be descriptive about what's going on, all without the use of whenever:

  whenever("Click Me!").is('clicked').then('change it to "clicked"')
turns into:

  var cbs = {};
  cbs.setClickedText = function() { $(this).text('Clicked!'); };

  $('a#click-me').click(cbs.setClickedText);
Yep, I've played around with tons of approaches to this problem : your solution is where I started. It's probably totally ok, but there was something about it that just didn't sit right with me.

In eyeballs.js, for examples, I explored doing all of the binding via the html elements themselves, eg:

<a href="#" data-bind="posts#new">New Post</a>

which would map to a pre-defined posts controller new action.

whenever.js is just another exploration along the same theme. Again, I'm not arguing that it's better or worse: just my motivations for making it.