我有一个带有数据结构的widgetA - d。 widgetA初始化widgetB并将数据传递给widgetB,如
$('<div>').widgetB({d:d});
但是,当widgetA中的数据发生变化时,在widgetB中他们不会这样,因为当将变量作为选项传递时,jquery widget factory会克隆它们。
如何将参考pf变量传递给widget?
在此示例中,widgetB不会更改值,两次都会打印A.
答案 0 :(得分:3)
实际上我发现了一个通过引用传递选项的技巧,如果你重新初始化小部件,那么通过引用传递选项(http://jsfiddle.net/sbNUh/8/)。
答案 1 :(得分: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
,因为它们都是在同一个(匿名)函数中定义的。
答案 3 :(得分:0)
您可以尝试保留每个小部件使用的全局变量。