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

时间:2011-10-05 16:29:14

标签: javascript jquery jquery-ui

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

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

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

如何将参考pf变量传递给widget?

http://jsfiddle.net/sbNUh/

在此示例中,widgetB不会更改值,两次都会打印A.

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

你可以传递这样的功能

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

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

答案 2 :(得分:1)

以这种方式将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/

答案 3 :(得分:0)

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