0
假設我們有1個父視圖模型(對應於視口)和2個嵌套(網格和窗口)視圖模型。在網格actioncolumn點擊,我們得到一個記錄ID,將其作爲ajax請求url部分傳遞,並將響應顯示在窗口文本字段中。如果響應中顯示的值沒有顯示默認值。使用extjs在ViewModels之間傳遞數據參數
有趣的部分是,如何使用視圖模型綁定將響應數據傳遞到窗口文本字段。我想出了以下解決方案:
1)在AJAX請求創建使用將通過模型傳遞響應數據的網格視圖模型鏈接,如果需要的話在創建的默認值:
grid.getViewModel().linkTo('custom', {
reference: 'CustomModel',
create: data
});
Ext.define('CustomModel', {
extend: 'Ext.data.Model',
fields: [
{ name: 'name', defaultValue: 'default name' },
{ name: 'value', defaultValue: 'default value' }
]
});
2)使用公式在網格視圖模型數據發佈到父視圖模型:
formulas: {
publishCustom: function(get) {
this.set('main.custom', get('custom'));
}
}
3)填充窗口文本字段與從父(視口中的數據)視圖模型
bind: '{main.custom.name}'
您可能會發現小提琴here。
這似乎有點不明顯,並嚴重創建額外的數據副本。對於這樣的問題,是否有更清潔的解決方案?
爲什麼網格或窗口有一個視圖模型呢?看起來好像請求屬於父容器的級別,因爲它對網格和窗口都有影響。 –
這只是一個簡化的例子,沒有一堆嵌套視圖模型的公式。當一個父視圖模型中有數千行代碼時,閱讀和維護變得有點困難。就我們使用MVC或MVVM模式而言,在自己的視圖模型中使用這種邏輯似乎是正確的。 – fen1ksss
我得到的是,看起來好像執行加載的責任不應該在網格的層次上,因爲該信息需要傳遞給其他組件。這種行爲看起來好像應該控制在任何控制窗口/網格的容器級別。你現在這樣做的方式不是公式的正確使用方式。 –