首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于ExtJs4 MVC架构

关于ExtJs4 MVC架构
EN

Stack Overflow用户
提问于 2011-11-04 08:46:31
回答 2查看 813关注 0票数 0

我有以下意见:

LeftNavigation (网格面板)

代码语言:javascript
复制
Ext.define('Ray.view.StationsList', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.LeftNavigation',

    store: 'LeftNavigation',
    title: 'Navigation',
    hideHeaders: true,

    initComponent: function () {
        this.columns = [{
            dataIndex: 'name',
            flex: 1
        }];

        this.callParent();
    }
});

Content (Panel)

代码语言:javascript
复制
Ext.define('Ray.view.Contents', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.Contents'
});

窗体(窗体面板)

代码语言:javascript
复制
Ext.define('Ray.view.Form', {
    extend: 'Ext.form.Panel',
    alias: 'widget.Claim',

    title: 'ClaimForm',

    initComponent: function () {
        this.items = [{
            xtype: 'form',
            items: [{
                xtype: 'textfield',
                name: 'name',
                fieldLabel: 'Name'
            }, {
                xtype: 'textfield',
                name: 'email',
                fieldLabel: 'Email'
            }]
        }];

        this.buttons = [{
            text: 'Save',
            action: 'save'
        }];

        this.callParent(arguments);
    }

});

我试图使用网格面板作为导航,它的数据将来自一个json文件,其中包含一个“id”和“name”字段。其中id将用作链接id,名称将用作链接的文本。

“内容”将是显示所有数据的主要区域。在这种情况下,我需要在这里显示几个表单。因此,我在这里试图实现的是,当用户单击导航网格上的特定链接时,我需要将与该链接的id相对应的表单加载到“Content”区域。

我试图弄清楚如何定义控制器或控制器来实现这一点?

非常感谢,一个合适的答案将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-04 16:57:12

听起来,您需要为网格的itemclick事件创建一个侦听器,以确定要加载哪种表单。

在ExtJS中有许多访问对象的方法,因此,为了遵循我的代码示例,您需要为每个组件分配一个iditemId。此外,我不知道您的文件是如何构造的,所以您可能需要修改它才能正常工作。但是,它应该为控制器的工作提供一个基础。

代码语言:javascript
复制
Ext.define('Ray.controller.Stations', {
    extend: 'Ext.app.Controller',
    views: ['LeftNavigation', 'Contents', 'Claim'],
    init: function() {
        this.control({
            '#leftNavigationGrid': {
                itemclick: this.onItemClick
            }
        });
    },
    onItemClick: function(grid, record) {
        var id = record.data.id;
        var myForm = Ext.widget('Claim', { width: 400; height: 600; });

        Ext.ComponentQuery().query('#Contents')[0].add(myForm);
    }
});

[0]Ext.ComponentQuery().query()之后出现的原因是总是返回一个数组。因为我们确切地知道我们(可能)得到的是一个带有iditemId的对象,所以我们只需要返回数组中的第一个对象。

阅读JordbaerHjelmen提到的整个MVC教程,可能是从第1部分开始,这对您确实有好处。

票数 2
EN

Stack Overflow用户

发布于 2011-11-04 14:48:20

我也学到了这一点:您看过关于MVC模式的两个教程了吗?

4部分MVC教程的第3部分:

http://www.sencha.com/learn/architecting-your-app-in-ext-js-4-part-3/

还有一个“独立”教程:

http://www.sencha.com/learn/the-mvc-application-architecture/

这两种方法都能让控制器正常工作。在第一个教程中有一个包含源代码的完整项目,而在后一个教程中,您需要自己创建它,但是它不需要花费太多时间。

最好的

安德烈亚斯

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8006753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档