2014-09-19 58 views
2

這種情況非常常見,當您單擊網格中的單元格,出現窗體的模態窗口時,您可以進行更改,單擊保存按鈕,然後讓在網格中存儲更新。在第4次,我通過loadRecord從網格中完成,然後使用set-method將更改應用到網格存儲。現在我試圖用MVVM方法來做,並且有一些Stuck。因爲當我將同一個虛擬機設置爲網格和表單時,在表單銷燬(Save或Cancel按鈕)之後,虛擬機也在銷燬,應用程序崩潰。所以,我們不能在多個組件中使用一個VM實例。我們必須把它放在一個容器裏,一個網格和一個窗體。所有正式的例子都屬於這種類型。 問題是,如果有人解決了這個問題?
fiddle
answer from sencha forumextjs 5如何將商店綁定到模式窗口和網格

回答

2

除了user1638582的回答,我自己的解決辦法是選擇記錄添加到視圖模型形式爲:

var form = Ext.create('Plus.view.FormbetV',{ 
    viewModel:{ 
     data:{ 
      currentRec:this.getView().getSelectionModel().getSelection()[0] 
     } 
    } 
}); 

https://fiddle.sencha.com/#fiddle/jp6

1

你有沒有通過閱讀this blog post,其中網格的MVVM example使用?

+0

是的,謝謝,但我在我看來,它不是純粹的MVVM方法,而是與MVC結合使用,因爲您使用全局控制器,並且不會使用'bind'指令將存儲綁定到網格。我對如何通過普通虛擬機綁定模式形式和網格數據感興趣。由於根據文檔,這是不可能的。 – leshicus 2014-09-22 07:56:56

+0

按照Evan的觀點,在你的論壇線程中,兩個組件不能共享相同的ViewModel。 – arthurakay 2014-09-22 13:44:36

4

ExtJs 5 ViewModel具有組件的嵌套結構,所有子對象都可以使用父項的ViewModel。所以,你可以嘗試窗口對象添加到視圖控制器的看法:

var form = Ext.create('Plus.view.FormbetV'); 
var window = Ext.create('Ext.Window', { 
    frame: true, 
    width: 350, 
    height: 200, 
    modal: true, 
    layout: 'fit' 
}); 
window.add(form); 
this.getView().add(window); // <--- add parent 'scope' 
window.show(); 

而且不要忘記刪除這些代碼:

//var viewModel = Ext.getCmp('gridbet').getViewModel(); 
//this.setViewModel(viewModel); 

這對我的作品,但在這種情況下,窗口的大小會受到限制按網格大小。

+0

我喜歡你的解決方案,但似乎窗口標題有問題 - 它沒有被看到。 – leshicus 2015-03-17 09:54:02

+0

感謝您的解決方案,有趣的方式! 要修復窗口標題,我們可以使用'height:300'作爲網格,然後刪除_gridbet_ ViewModel的公式。但無論如何模態窗口將被打破。 – afschr 2015-03-17 16:09:34