2011-04-03 60 views
2

的傳球選擇,我有兩個JQuery的小窗口,是一種「主要」窗口小部件,另外,可以考慮一個孩子。孩子處理收集主要要求的特定數據。主要用於AJAX請求。所以,主要有一組發送到服務器的選項。其中一種選擇也是孩子的選擇。JQuery的小工具 - 通過參考

爲了使這更清楚,我有有幾個選項的主要部件。然後它創建並附加一個子部件。這個子部件有一個額外的選項,需要在發送AJAX請求之前填充到主部件中。爲了使這項工作,我傳遞給孩子:this.options.someArray

這工作正常,但是,當對子部件中的數組進行更改時,他們永遠不會回到主部件。這意味着AJAX請求在這個地方發送一個空數組。我怎樣才能解決這個問題?

[如果這不是標準的行爲 - 我可以張貼代碼示例]主控件

代碼示例:

$.widget('be.deckEditor', { 
    options: { 
    deck: { name: "", id: 0, cards: [], tags: [] } 
    }, 

代碼來創建子控件:

tagEditBox = $('<div>'); 
tagEditBox.tagEditor({tags:this.options.deck.tags}); 

的Widget _Init代碼:

_init: function() { 
    this.options.tags = ['ace','two']; 
}, 
+0

你應該張貼的代碼,因爲共享引用數組是共享引用數組:-)如果引用似乎並沒有被共享,然後在東西你的代碼做一些喜歡做數組的副本; JavaScript本身不會這樣做。 – Pointy 2011-04-03 19:02:51

+0

包括什麼應該是相關的位。 – Serodis 2011-04-03 19:17:28

回答

0

如果你想要的「_init」的代碼來重新設置「標籤」 內容,那麼就不要設置它來指一個全新的數組:

_init: function() { 
    this.options.tags[0] = 'ace'; 
    this.options.tags[1] = 'two'; 
    this.options.tags.length = 2; 
}, 

你可以寫一個函數,使目標數組包含另一個數組包含的內容;我不認爲有一個內置的,但我不記得曾經想要找到這樣的事情:

function arrayCopy(src, dest) { 
    for (var i = 0; i < src.length; ++i) dest[i] = src[i]; 
    dest.length = src.length; 
} 

(如果你想的目的地是一個完整的副本,長度的最後一行,只需要和所有)。

+0

謝謝,我是JavaScript新手,沒有意識到這樣做創建了一個新的數組並更改了引用。 – Serodis 2011-04-03 19:36:57

+0

關於數組複製函數,有天生的把戲:var arr_copy = arr.slice(0); – Johnner 2011-04-03 20:08:21

+0

@Johnner哦,好吧,等等:-) ---哦,不要等待一秒;這使得數組的副本,這正是我們**不想在這裏做的。我們想從源數組**複製到**現有的**目標數組中。 – Pointy 2011-04-03 20:09:07