jQuery小部件,不是我认为的那样?

时间:2011-07-20 00:06:50

标签: jquery jquery-ui

我认为jQuery小部件是jQuery对象,它们可以轻松地链接到DOM对象(例如,你可以存储状态,或者处理事件),但是我在这里理解实例模型时遇到了一些问题。我有一个这样的对象;

var xs_widgets = {

    jQuery : $,

    options: { },

    _create: function () {
        this.make_sortable() ;
    },

    _init: function () { alert ( 'init' ) ; }

    make_sortable: function () { alert ( 'make-sortable' ) ; }
}

我用;

将它绑定到jQuery
jQuery.widget( "ui.xs_widgets", xs_widgets );

然后,我尝试将一些DOM元素绑定到窗口小部件;

$('li.widget').xs_widgets();

现在就是这样。我每个<li class="widget">都附加了一个jQuery对象,但是我可以收集的是一个全局的xs_widget对象,而且它从上面的查询得到了jQuery对象,而你自己必须处理实例数据?我认为小部件的重点是避免处理实例的开销?上面的代码针对HTML运行,其中包含两个<li>元素的产量;

make-sortable
init
make-sortable
init

我在期待;

make-sortable
init
init

哦,请帮忙!我正在阅读教程和文章,但我似乎错过了某些重要的东西。

1 个答案:

答案 0 :(得分:2)

您的xs_widgets函数小部件会为您的选择器中的每个匹配元素调用一次(因此,两次使用两个标记)。

  

我认为每个人都附加了一个jQuery对象。

他们这样做。这就是_create和_init都被调用两次的原因。但是,只有在将窗口小部件添加到元素时才会调用create方法一次。如果您在第一次通话后立即再次拨打$('li.widget').xs_widgets();,则只能获得:

  

初​​始化
  初始化

Here's an example.