注意:作者是EXT JS的新手,并且正在尝试在他的项目中使用MVC
想象一下,我有一个不修复数据模型的Web服务。我希望动态创建我的模型,从中动态创建存储,从而动态创建其数据存储在这些存储中的组件。
让我们先看一下模型的样本类定义:
Ext.define('MNESIA.model.User', { extend: 'Ext.data.Model' });
在这个模型定义中,我在配置对象中遗漏了'fields'
参数。这是因为当我创建上述类型的模型的实例时,我想动态地给它提供字段定义,换句话说,我可以拥有该模型的许多实例,但它们都具有不同的'fields'
参数定义
从这里我创建了商店的定义,如下所示:
Ext.define('MNESIA.store.Users', { extend: 'Ext.data.Store', autoLoad: true } });
在那里,我有一个商店定义。我遗漏了'model'
参数,因为我将动态地将它附加到此类的每个实例。事实上,即使是'data'
和'proxy'
设置也没有被提及,因为我想在这个商店的实例化过程中将它们作为对象。
从那里开始,我希望拥有动态视图,由动态商店驱动。下面我有一个Grid的定义
Ext.define('MNESIA.view.Grid' , { extend: 'Ext.grid.Panel', alias : 'widget.mygrid', width: 700, height: 500 });
我在网格规范中遗漏了以下参数:'columns'
,'store'
和'title'
。这是因为我打算将许多网格作为上述规范的实例创建,但具有动态存储,标题和列定义。
在我的控制器中,我有一些代码如下所示:
function() { var SomeBigConfig = connect2Server(); /* where: SomeBigConfig = [ {"model":[ {"fields": ["SurName","FirstName","OtherName"] } ] }, {"store":[ {"data": {"items":[ {"SurName":"Muzaaya","FirstName":"Joshua","OtherName":"Nsubuga"}, {"SurName":"Zziwa","FirstName":"Shamusudeen","OtherName":"Haji"}, ... ] } }, {"proxy": { "type": "memory", "reader": { "type": "json", "root": "items" } } } ] }, {"grid",[ {"title":"Some Dynamic Title From Web Service"}, {"columns": [{ "header": "SurName", "dataIndex": "SurName", "flex": 1 },{ "header": "FirstName", "dataIndex": "FirstName", "flex": 1 }, { "header": "OtherName", "dataIndex": "OtherName", "flex": 1 } ]} ] } ] */ var TheModel = Ext.create('MNESIA.model.User',{ fields: SomeBigConfig[0].model[0].fields }); var TheStore = Ext.create('MNESIA.store.Users',{ storeId: 'users', model: TheModel, data: SomeBigConfig[1].store[0].data, proxy: SomeBigConfig[1].store[1].proxy }); var grid = Ext.create('MNESIA.view.Grid',{ store: TheStore, title: SomeBigConfig[2].grid[0].title, columns: SomeBigConfig[2].grid[1].columns }); // From here i draw the grid anywhere on the, page say by grid.renderTo = Ext.getBody(); // end function }
现在这种动态创建模型,然后存储,然后网格确实会导致内存浪费,因此每次我们想要销毁该组件时都需要调用每个组件的destroy方法。
的问题:
Qn 1: EXT JS 4的MVC实现是否允许这样做?
Qn 2:如何使用我的新课程xtypes
获得相同的功能。比如说:
{ xtype: 'mygrid', store: TheStore, title: SomeBigConfig[2].grid[0].title, columns: SomeBigConfig[2].grid[1].columns }
Qn 3:如果我上面写的内容确实有效且实用正确,我可以将它应用于所有组件,如Panels,TabPanels,Trees(其中他们的配置是由远程服务器发送的?)
Qn 4:如果我有控制器A和B,控制器A具有视图规范:[C,D],控制器B具有视图:[E,F],它会是如果视图:E生成的操作由控制器A处理,则更正?即控制器是否可以处理未在其视图配置中注册的视图的操作?
注意:我对Ext JS很新,但很想了解更多。建议我如何改进我的EXT JS学习曲线。感谢
答案 0 :(得分:1)
在我的选项中,你的模型必须映射到要渲染到视图的商店,例如,如果实现像这样的模型部分
{"model":[{"fields":[{name:'name',type:'string'}, {name:'id',type:'string'}]}]},这将很容易映射到视图存储渲染它。