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:同一对象的图像
这两个组件(数据视图和表单)都有自己的存储(DirectStore)。这两个存储区都有一个参数,该参数被发送到服务器,以便知道谁的字段值或谁的图像被返回

我的问题是:

  • 如何将对象id从网格传递到窗口
  • 如何将对象id传递给选项卡的组件以加载 正确的数据
  • 我从哪里打电话来装载上述商店
  • 信息:

    • 我的问题也与最佳实践有关,很好。这将在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'
        }
    ]