Model view controller 将对象ID传递给ExtJS窗口
我有一个带有选项卡面板的窗口,我在其中布局表单(第一个选项卡)和数据视图(第二个选项卡)。此窗口可能从网格打开(例如双击)。这两个选项卡描述:Model view controller 将对象ID传递给ExtJS窗口,model-view-controller,extjs,load,extjs4,store,Model View Controller,Extjs,Load,Extjs4,Store,我有一个带有选项卡面板的窗口,我在其中布局表单(第一个选项卡)和数据视图(第二个选项卡)。此窗口可能从网格打开(例如双击)。这两个选项卡描述: 表1:对象的数据(比如ca) 表2:同一对象的图像 这两个组件(数据视图和表单)都有自己的存储(DirectStore)。这两个存储区都有一个参数,该参数被发送到服务器,以便知道谁的字段值或谁的图像被返回 我的问题是: 如何将对象id从网格传递到窗口 如何将对象id传递给选项卡的组件以加载 正确的数据 我从哪里打电话来装载上述商店 信息: 我的问题
- 表1:对象的数据(比如ca)
- 表2:同一对象的图像
- 我的问题也与最佳实践有关,很好。这将在MVC应用程序中使用李>
- 我的窗口必须从Direct call获取所有数据李>
initComponent
方法中创建选项卡。由于您的窗口要表示一个特定的对象(即网格行中的记录),因此在创建窗口时将整个记录或仅将其id传递给窗口是有意义的。
您可以在网格上设置事件处理程序,如:
var openObjectWindow = function(view, record) {
Ext.create('YourWindowClass', {
objectId: record.getId()
})
};
grid.on('itemdblclick', openObjectWindow);
当您在窗口的initComponent
中声明选项卡时,您将以类似的方式将objectId
传递给它们(假设已经定义了选项卡的类):
最后,您应该将存储设置为在创建时自动加载(
自动加载:true
),前提是在呈现存储时,存储是与选项卡一起创建的。您的假设是正确的。将对象传递到存储的位置?将对象传递到存储很容易:假设存储是在选项卡“initComponent
中创建的,您只需通过存储配置传递objectId:this.objectId
。最棘手的部分是如何让商店将objectId传递给服务器。查看Ext.data.AbstractStore
中的load
方法。您将看到它准备选项
通过代理发送。您需要将您的objectId
应用于那些选项
。一种方法是扩展Ext.data.Store
并编写自己的load
方法实现。或者,您也可以在选项卡的initComponent
中执行Store.load({objectId:this.objectId})
,但在这种情况下,请关闭Store autoload。谢谢您的输入。当我使用DirectStore时,这适用于我:store.load({params:{id:10})。我的问题是代码看起来有点混乱:我从窗口的initComponent创建存储,将其传递给两个选项卡的内容,然后从这里加载这两个存储。
this.defaults = {
objectId: this.objectId
}
this.items = [
{
xtype: 'mydatatab'
},
{
xtype: 'myimagestab'
}
]