2011-10-05 18 views
1

我有widgetA與數據結構 - d。 widgetA初始化widgetB和傳遞數據給widgetB,像通過變量作爲參考jqueryui部件

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

但是,當widgetA變化的數據,在widgetB他們不,那是因爲傳遞變量作爲選項時,jQuery的小部件工廠克隆它們。

如何將參考pf變量傳遞給小部件?

http://jsfiddle.net/sbNUh/

在這個例子中widgetB不會改變價值和兩次打印A.

回答

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

這也標誌着更多的是你在積極獲取最新的狀態

0

你可以嘗試保持每個小部件使用全局變量。

+0

可能有多個widgetA小部件,每個小部件都有自己的數據和自己的widgetB小部件。 – codez

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})) 

Wheneve您想獲得變量,請使用:this.options.d()。當您想更改變量時,請使用this.options.d("newvariable")

該方法的有效性基於函數的工作方式:函數可以引用定義在相同範圍內的變量。因此,function d始終可以指private_var_d,因爲它們都在相同(匿名)函數中定義。

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

3

實際上,我發現一個技巧,通過引用傳遞選項,如果您重新初始化該小部件的選項通過引用傳遞(http://jsfiddle.net/sbNUh/8/)。