传递变量作为jqueryui小部件的引用

Pass variable as reference to jqueryui widget

本文关键字:小部 引用 jqueryui 变量      更新时间:2023-09-26

我有一个具有数据结构的widgetA - d. widgetA初始化widgetB并将数据传递给widgetB,如

$('<div>').widgetB({d:d});

但是,当widgetA中的数据发生变化时,在widgetB中它们不会发生变化,这是因为当将变量作为选项传递时,jquery widget工厂会克隆它们。

如何传递引用pf变量小部件?

http://jsfiddle.net/sbNUh/

在这个例子中,widgeb不改变值,两次都打印a。

实际上我发现了一个通过引用传递选项的技巧,如果您重新初始化小部件,该选项将通过引用传递(http://jsfiddle.net/sbNUh/8/)。

你可以像这样传递一个函数

http://jsfiddle.net/sbNUh/1/

// widjet A
self.a = $('<div>').widgetB({ d: function() { return d; }}).appendTo(el);
....
// widjet B
$('#con').append('<div>'+this.options.d().a+'</div>');

这也表明您正在积极地检索最新状态

d改为函数,如下所示:

var private_var_d = "A";
function d(set){
    if(typeof set != "undefined") private_var_d = set;
    return private_var_d;
}
(self.a=$('<div>').widgetB({d:d}))

当您想要获得变量时,使用:this.options.d()。当需要更改变量时,使用this.options.d("newvariable")

此方法的有效性取决于函数的工作方式:函数可以引用定义在同一定义范围内的变量。因此,function d总是可以引用private_var_d,因为它们都在同一个(匿名)函数中定义。

小提琴:http://jsfiddle.net/sbNUh/2/

您可以尝试保留每个小部件使用的全局变量