2011-09-20 52 views
1

注:作者是新的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'设置也没有提到,因为我想在这个商店的实例化过程中对它们进行赋值。

从那里,我想拥有动态视图,由动态商店驱动。下面在这里我有一个网格

 
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 
     } 

现在这种型号,然后存储,然后网格动态创建的并导致到内存浪费,所以这将每次我们想要销毁该组件时,都需要调用每个组件的销毁方法。

问题:

QN 1:是否MVC实现EXT JS的4许可证吗?

Qn 2:我如何通过使用我的新类的xtypes获得相同的功能。例如说:

 
    { 
    xtype: 'mygrid', 
    store: TheStore, 
    title: SomeBigConfig[2].grid[0].title, 
    columns: SomeBigConfig[2].grid[1].columns 
    } 

QN 3:如果我写了上面真正起作用的,是务实正确的,我可以将此像面板,TabPanels,树(因此他们CONFIGS发送所有组件由远程服务器)?

Qn 4:如果我有控制器A和B,控制器A的视图规范为[C,D],控制器B的视图为[E,F],如果产生的动作是正确的通过查看:E由控制器A处理?即控制器能否处理未在其视图配置中注册的视图的操作?

注:对于Ext JS来说,这是相当新的事物,但很想了解更多。请教我如何改进我的EXT JS学习曲线。谢谢

回答

1

在我的选择中,您的模型必须映射到要渲染到视图的商店,例如,如果实现像这样的模型零件

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

+0

所以我的模型出了问题?我只有一个简单的模型规范来说明我的新动态MVC设计模式 –