Динамические модели, магазины и представления - лучший способ - PullRequest
1 голос
/ 20 сентября 2011

ПРИМЕЧАНИЕ. Автор является новичком в EXT JS и пытается использовать MVC в своих проектах

представьте, что у меня есть веб-сервис, модель данных которого не зафиксирована.Я хотел бы, чтобы мои модели создавались динамически, из которых я динамически создаю хранилища и, следовательно, динамические компоненты, данные которых находятся в этих хранилищах.

Давайте начнем с просмотра определения класса модели для модели:

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 в MVC?

Qn 2: Как бы я получил ту же функциональность, используя xtypes моих новых классов.Скажем, например:

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

Qn 3: Если то, что я написал выше, действительно работает и прагматично правильно, могу ли я применить это ко всем компонентам, таким как Панели, TabPanels, Trees (посредством чего их конфигурации отправляются удаленным сервером)?

Qn 4: Если у меня есть контроллеры A и B, с контроллером A, имеющим спецификацию представлений: [C, D] и контроллер B, имеющий представления: [E, F], будет ли правильно, если действия, сгенерированные представлением: E, обрабатываются контроллером A?т.е. может ли контроллер обрабатывать действия представления, которое не зарегистрировано в его конфигурации представлений?

ПРИМЕЧАНИЕ: я новичок в Ext JS, но хотел бы узнать больше.Посоветуйте мне, как улучшить мою кривую обучения EXT JS.Спасибо

1 Ответ

1 голос
/ 20 сентября 2011

В моем варианте ваша модель должна отображаться в хранилище, которое должно быть отображено в виде, как, например, если реализовать деталь модели следующим образом

{"model":[{"fields":[{name:'name',type:'string'},
            {name:'id',type:'string'}]}]}
, это будет легко отображено в хранилище для представления, отображающего его.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...