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