I have just started trying out micro libraries instead of using jQuery and I'd like to use qwery with bean. If I set bean.setSelectorEngine(qwery); why does the following not work?
bean.on('.masthead', 'click', function () {
    console.log('click fired');
});
I am also using bonzo for DOM utility, so I have set it to use the dollar along with qwery so I can select elements in a jQuery-like fashion: e.g. $('.masthead').
function $(selector) {
    return bonzo(qwery(selector));
}
This also does not work. Should I not be able to use the following with bean?
bean.on($('.masthead'), 'click', function () {
    console.log('click fired');
});
Perhaps I have missed something important in the bean documentation.. What do I need to do to fix this?
Also, I am trying to avoid using Ender if at all possible, I am trying to keep my external libraries down to a minimum.
Yes, you can use all those libraries together without Ender. But you are going to have to wire up all the connections between those libraries yourself.
This should get you started:
// make Bean and Bonzo use Qwery 
// as their internal selector engine 
bean.setSelectorEngine(qwery);
bonzo.setQueryEngine(qwery);
// to use $ instead of bonzo
function $(selector, root) {
    return bonzo(qwery(selector, root));
};
// $() will return a bonzo object
// so if you want to be able to use 
// bean's methods on the bonzo object 
// like $().on()
// you are going to have to extend bonzo
bonzo.aug({
  on: function (eventName, callback) {
    return this.each(function (elem) {
        return bean.on(elem, eventName, callback);
    });
  },
  // do the same for bean's other methods (fire, off, etc)
});
// now you should be able to do this:
$('.masthead').on('click', function () {
    console.log('click fired');
});
Hope that helps! :)
Just to chime in, I took @Johnny's example above and made it a little more generic as I had the same problem. This example is in CoffeeScript + Underscore-Contrib, but the general idea is that you don't need to wrap every Bean function by hand, you can do it in a loop by manipulating the arguments:
  # Setup Qwery/Bonzo
  window.$ = (selector, root) ->
    bonzo qwery(selector, root)
  # Glue Bean event handling into Bonzo/Qwery
  events =
    clone : ->
      args = _.toArray arguments
      bean.clone.apply null, args
  _.each ['on','one','off','fire'], (ev) ->
    events[ev] = ->
      args = _.toArray arguments
      this.each (elem) ->
        bean[ev].apply null, _.cons(elem, args)
  bonzo.aug events
Hope it helps someone in the future.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With