【问题标题】:Dynamic Models, Stores, and Views -- Best way to动态模型、存储和视图——最好的方法
【发布时间】:2011-11-21 07:10:55
【问题描述】:

注意:作者是 EXT JS 的新手,正在尝试在他的项目中使用 MVC

假设我有一个数据模型不固定的 Web 服务。我希望动态创建我的模型,我从中动态创建存储,因此动态组件的数据在这些存储中。

让我们从查看模型的示例类定义开始:

Ext.define('MNESIA.model.User', { 扩展:'Ext.data.Model' });

在这个模型定义中,我在配置对象中省略了'fields' 参数。这是因为当我创建上述类型模型的实例时,我想动态地给它它的字段定义,换句话说,我可以拥有这个模型的许多实例,但它们的 'fields' 参数的定义都不同。

从这里我创建商店的定义,如下所示:

Ext.define('MNESIA.store.Users', { 扩展:'Ext.data.Store', 自动加载:真 } });

在那里,我有一个商店定义。我省略了'model' 参数,因为我会将它动态附加到此类的每个实例。事实上,即使是 'data''proxy' 设置也没有提到,因为我想在这个商店的实例化期间分配它们。

从那里开始,我希望拥有由动态商店驱动的动态视图。下面我有一个网格的定义

Ext.define('MNESIA.view.Grid' , { 扩展:'Ext.grid.Panel', 别名:'widget.mygrid', 宽度:700, 身高:500 });

我在 Grid 规范中省略了以下参数:'columns''store''title'。这是因为我打算创建许多网格作为上述规范的实例,但具有动态存储、标题和列定义。

在我的控制器的某些地方,我有一些代码如下所示:

功能() { var SomeBigConfig = connect2Server(); /* 在哪里: SomeBigConfig = [ {“模型”:[ {“字段”: ["SurName","FirstName","OtherName"] } ] }, {“店铺”:[ {“数据”: {“项目”:[ {"SurName":"Muzaaya","FirstName":"Joshua","OtherName":"Nsubuga"}, {"SurName":"Zziwa","FirstName":"Shamusudeen","OtherName":"Haji"}, ... ] } }, {“代理”: { “类型”:“内存”, “读者”:{ “类型”:“json”, “根”:“项目” } } } ] }, {“网格”,[ {"title":"来自 Web 服务的一些动态标题"}, {“列”: [{ “标题”:“姓氏”, "dataIndex": "姓氏", “弹性”:1 },{ “标题”:“名字”, "dataIndex": "名字", “弹性”:1 }, { “标题”:“其他名称”, "dataIndex": "其他名称", “弹性”:1 } ]} ] } ] */ var TheModel = Ext.create('MNESIA.model.User',{ 字段:SomeBigConfig[0].model[0].fields }); var TheStore = Ext.create('MNESIA.store.Users',{ storeId: '用户', 型号:TheModel, 数据:SomeBigConfig[1].store[0].data, 代理:SomeBigConfig[1].store[1].proxy }); var grid = Ext.create('MNESIA.view.Grid',{ 商店:TheStore, 标题:SomeBigConfig[2].grid[0].title, 列:SomeBigConfig[2].grid[1].columns }); // 从这里我在页面上的任何地方绘制网格 grid.renderTo = Ext.getBody(); //结束函数 }

现在这种动态创建模型,然后存储,然后网格确实会导致内存浪费,因此这将需要在每次我们想要销毁该组件时调用每个组件的销毁方法。

问题:

Qn 1: EXT JS 4 的 MVC 实现是否允许这样做?

Qn 2: 我如何通过使用xtypes 我的新课程。比如说:

{ xtype:“我的网格”, 商店:TheStore, 标题:SomeBigConfig[2].grid[0].title, 列:SomeBigConfig[2].grid[1].columns }

Qn 3: 如果我上面写的确实有效并且 实用 正确,我可以将它应用于所有组件,如面板、TabPanels、树(其中他们的配置由远程服务器发送)?

Qn 4: 如果我有控制器 A 和 B,控制器 A 具有视图规范:[C,D],控制器 B 具有视图:[E,F],会是如果视图生成的动作正确: E 由控制器 A 处理?即控制器可以处理未在其视图配置中注册的视图的操作吗?

注意:我对 Ext JS 很陌生,但很想了解更多。建议我如何改善我的 EXT JS 学习曲线。谢谢

【问题讨论】:

    标签: javascript jquery html css extjs


    【解决方案1】:

    在我的选项中,您的模型必须映射到要呈现到视图的商店,例如,如果像这样实现模型部分

    {"model":[{"fields":[{name:'name',type:'string'}, {name:'id',type:'string'}]}]} ,这将很容易地映射到商店以供视图渲染。

    【讨论】:

    • 我的模型有问题吗?我只有一个简单的模型规范来说明我的新动态 MVC 设计模式
    猜你喜欢
    • 2010-10-25
    • 2010-10-25
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多