You are here

Drupal专业开发指南 第17章 使用Drupal.behaviors

g089h515r806 的头像
Submitted by g089h515r806 on 星期一, 2009-08-24 15:38

 

JavaScript的交互,是通过向DOM中的元素绑定一些行为实现的(例如,使用一个事件,比如鼠标点击,来触发动作)。对DOM的一个修改,可能就会导致这一绑定的失效。所以,尽管我们前面所用的plusone.js文件,在一个简单的Drupal站点上可以很好的工作,但是在一个复杂的Drupal站点上,如果其它JavaScript文件也操作这个DOM的话,那么就可能会遇到问题。Drupal提供了一个中心变量Drupal.behaviors,使用它就可以注册JavaScript函数了,这样就确保了绑定的行为在需要的时候能正确的执行。下面的plusone.js版本,和前面的版本在功能上是一样的,都允许通过AJAX进行投票,但是这里的这个,通过使用Drupal.behaviors进行了注册,从而保护了我们的绑定:
 
// $Id$
 
Drupal.behaviors.plusone = function (context) {
    $('a.plusone-link:not(.plusone-processed)', context)
    .click(function () {
        var voteSaved = function (data) {
            $('div.score').html(data.total_votes);
            $('div.vote').html(data.voted);
        }
        $.ajax({
            type: 'POST',
            url: this.href,
            dataType: 'json',
            success: voteSaved,
            data: 'js=1'
        });
        return false;
    })
    .addClass('plusone-processed');
}
 
    注意,这里我们没有进行Drupal.jsEnabled测试,这是因为现在Drupal能自动的帮我们实现了这一点。关于Drupal.behaviors的更多详细,可参看misc/drupal.js。
 老葛的Drupal培训班 http://www.thinkindrupal.com

Drupal版本: