2013-10-21 18 views
5

我刚开始尝试使用微库而不是使用jQuery,我想使用qwery和bean。如果我设置bean.setSelectorEngine(qwery);为什么下面不起作用?我可以在没有Ender的情况下使用qwery和bean吗?

bean.on('.masthead', 'click', function() { 
    console.log('click fired'); 
}); 

我也使用BONZO对DOM工具,所以我将它设置为使用美元与qwery一起,所以我可以选择一个jQuery般的时尚元素:例如$('.masthead')

function $(selector) { 
    return bonzo(qwery(selector)); 
} 

这也行不通。我应该不能使用以下的bean吗?

bean.on($('.masthead'), 'click', function() { 
    console.log('click fired'); 
}); 

也许我错过了一些重要的bean文档..我需要做什么来解决这个问题?

此外,我想尽量避免使用Ender,如果可能的话,我会尽量减少外部库的数量。

回答

7

是的,你可以一起使用所有那些库,没有安德。但是你必须自己连接这些库之间的所有连接。

这应该让你开始:

// 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'); 
}); 

希望帮助! :)

+0

非常感谢你@Johnny,我现在就试试看 – Zander

1

只是为了加入,我拿了上面的@ Johnny的例子,使它更通用一些,因为我有同样的问题。这个例子中的CoffeeScript +下划线的Contrib,但总的想法是,你并不需要手工包装每一个Bean的功能,你可以在一个循环做到这一点通过操纵参数:

# 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 

希望它帮助未来的人。

相关问题