extjs 5如何将存储绑定到模式窗口和网格

extjs 5如何将存储绑定到模式窗口和网格,extjs,mvvm,Extjs,Mvvm,这种情况很常见,当dbl单击网格中的一个单元格时,会出现一个窗体的模式窗口,在该窗口中进行更改,单击“保存”按钮,并更新网格中的存储。在第4节中,我通过从网格到表单的loadRecord完成了这项工作,然后使用set方法将更改应用到网格存储中。现在,我正试图用MVVM方法来做这件事,并且有一些困难。因为当我将同一个虚拟机设置到网格和表单时,在表单销毁(保存或取消按钮)之后,虚拟机也在销毁,应用程序也在销毁。因此,我们不能在多个组件中使用一个VM实例。我们必须把它放在一个容器中,其中有一个网格和一

这种情况很常见,当dbl单击网格中的一个单元格时,会出现一个窗体的模式窗口,在该窗口中进行更改,单击“保存”按钮,并更新网格中的存储。在第4节中,我通过从网格到表单的loadRecord完成了这项工作,然后使用set方法将更改应用到网格存储中。现在,我正试图用MVVM方法来做这件事,并且有一些困难。因为当我将同一个虚拟机设置到网格和表单时,在表单销毁(保存或取消按钮)之后,虚拟机也在销毁,应用程序也在销毁。因此,我们不能在多个组件中使用一个VM实例。我们必须把它放在一个容器中,其中有一个网格和一个表单。所有官方的例子都是这样的。 问题是,是否有人解决了这个问题?


您通读了其中使用了for the grid的吗?

ExtJs 5 ViewModel具有组件的嵌套结构,所有子对象都可以使用父对象的ViewModel。因此,您可以尝试将窗口对象添加到ViewController视图:

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

它适合我,但在这种情况下,窗口大小将受到网格大小的限制。

除了用户1638582的答案外,我自己的解决方案是将选定的记录添加到表单的ViewModel中:

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

看看这些示例,“数据绑定->孤立子会话”似乎就是我们要寻找的:


是的,谢谢,但在我看来,这不是纯MVVM方法,而是与MVC相结合,因为您使用全局控制器,并且不使用“bind”指令将存储绑定到网格。我感兴趣的是如何通过公共VM以模态形式和网格绑定数据。因为根据文档,这是不可能的。根据Evan在论坛线程中的观点,两个组件不能共享同一个ViewModel。我喜欢你的解决方案,但似乎窗口标题有问题-看不到。感谢你的解决方案,有趣的方式!要修复窗口标题,我们可以对网格使用
height:300
,然后删除gridbet ViewModel的公式。但无论如何,模态窗口将被打破。
var form = Ext.create('Plus.view.FormbetV',{
   viewModel:{ 
       data:{
          currentRec:this.getView().getSelectionModel().getSelection()[0]
       }
   }
});