2015-02-12 61 views
0

我想在extjs5中動態地更改一個綁定,我無法完全弄清楚這是甚至可能的,或者如果我只是完全用錯誤的方式去做。我會盡力解釋我正在嘗試做什麼。我曾經這樣定義一個textarea:是否有可能動態更新extjs5中的綁定?

id: 'final-view', 
xtype: 'textareafield', 
editable: false, 
bind:{ 
    value: '{r.options}' 
} 

在我的ViewModel我有:

data: { 
    r:{ 
    options: {} 
    } 
} 

該頁面奠定出像:

textarea 
"Add Option" button 
option 1 
... 
option n 

我有一個按鈕 「添加選項」,這用一組選項添加一個組合框到頁面上,然後他們可以從下拉菜單中選擇一些內容並在組合框中輸入額外的內容。當創建組合我有遞增的變量,這個數字是用於創建唯一ID:

var new_opt = 'r.options.opt_' + cnt; 

這用於一個元素添加到r.options對象如下:

viewModel.set(new_opt, ''); 

創建的每個組合具有類似於所定義的綁定:

bind: { 
    value: '{r.options.opt_' + this.id.substr(14) + '}' 
} 

其中i∈1「 this.id.substr(14)」是我的CNT可變因此,對於第一個選項的值綁定是「{r.options。 opt_1}」。 最終目標是將每個組合框的所有內容連接並綁定到textarea。我想要做的是在添加選項時動態更新textareafield的綁定,以便在任何組合框輸入時更新最終視圖。因此,例如,如果有2個選項在視圖模型中的數據對象將是這樣的:

id: 'final-view', 
xtype: 'textareafield', 
editable: false, 
bind:{ 
    value: '{r.options.opt_1} {r.options.opt_2}' 
} 

和:

data: { 
    r:{ 
    options: {opt_1: 'value1', opt_2: 'value2'} 
    } 
} 
這個我想如下改變我的綁定是

所以textarea你會看到內容「value1 value2」。我想避免的是每次通過循環遍歷「r.options」對象中的所有元素並更改值,從頭開始重新填充textarea,所以我想了解是否有方法更新value字段的綁定會更有效率。任何幫助或指導將不勝感激,我仍然是相當新的MVVM範例。

回答

3

您很可能在尋找setBind()方法。

只要我2美分:整個事情看起來過於複雜,即使你找到了如何使它工作的方法,考慮簡化它。

+0

這正是我所需要的,我得到了這個偉大的工作!非常感謝。我現在也可以簡化它,只是爲了確保這個概念在投入太多時間之前能夠工作。 – johnjg12 2015-02-13 00:38:27

1

您不需要明確設置綁定。

viewModel.setData('newValue')將完成工作。

另外,你是否在任何地方存儲該數據?如果是這樣,也許你需要將它綁定到store.model字段值,那麼共享該模型實例的任何其他視圖將在數據更改時自動更新。如果是這種情況,您可能會將textarea綁定到「{model.field}」,其餘部分會自動發生。

我希望這會有所幫助。

相關問題