ExtJS:如何使用别名/xtype 来引用其他组件

Posted

技术标签:

【中文标题】ExtJS:如何使用别名/xtype 来引用其他组件【英文标题】:ExtJS: How to use alias/xtype to refer to other components 【发布时间】:2017-08-18 13:32:16 【问题描述】:

我是 ExtJS 的新手,并且在 this fiddle 中有一个简单的应用程序(仍然无法工作),它将数据从商店绑定到网格视图。我的商店看起来像:

Ext.define('ExtApp.store.BookStore',
        extend: 'Ext.data.Store',
        model: 'ExtApp.model.BookModel',
        fields: ['title', 'author', 'price', 'qty'],
        data: [....some data.....]
);

我想在我的视图中调用这家商店,但我不知道该怎么做,我的视图看起来像:

Ext.define('ExtApp.view.BookView',
        extend: 'Ext.grid.Panel',
        alias: 'widget.booklist',
        title: 'Book List',
        store: **WHAT SHOULD I PUT HERE**
);

我在网上找到的一种方法是,我可以创建一个 store 变量并将该变量放入 View 中,例如:

var bookstore = Ext.create('ExtApp.store.BookStore');
bookstore.load();

然后在视图内部:store: bookstore

但是我想问一下,在这种情况下如何使用 alias 或 xtype 而不是创建这个 store 变量?我尝试在 Store 中输入:alias: 'store.bookstore',然后在我调用的视图中:store: 'bookstore',但它没有用。我也尝试过使用:xtype: 'store.bookstore',然后是store: 'bookstore',但结果仍然相同,但不起作用。

你能解释一下alias和xtype有什么区别吗,在什么情况下我应该使用alias,在什么情况下我应该使用xtype?谢谢!

【问题讨论】:

查看下方答案如何将商店添加到网格 【参考方案1】:

在您的商店配置中添加 storeId 并在 app.js 中设置 stores:[yourStore]

sencha fiddle

Extjs alias vs xtype

Ext.onReady(function()

    Ext.define('ExtApp.model.BookModel',
        extend: 'Ext.data.Model',
        fields: [
            name: 'title', type: 'string',
            name: 'author', type: 'string',
            name: 'price', type: 'int',
            name: 'qty', type: 'int'
        ]
    );

    Ext.define('ExtApp.store.BookStore',
        extend: 'Ext.data.Store',
        alias: 'store.bookstore',
        storeId :'bookstore',
        model: 'ExtApp.model.BookModel',
        fields: ['title', 'author', 'price', 'qty'],
        data: [
             title: 'JDBC, Servlet and JSP',
             author: 'Santosh Kumar', price: 300, qty : 12000 ,
             title: 'Head First Java',
             author: 'Kathy Sierra', price: 550, qty : 2500 ,
             title: 'Java SCJP Certification',
             author: 'Khalid Mughal', price: 650, qty : 5500 ,
             title: 'Spring and Hinernate',
             author: 'Santosh Kumar', price: 350, qty : 2500 ,
             title: 'Mastering C++',
             author: 'K. R. Venugopal', price: 400, qty : 1200 
        ]
    );


    Ext.define('ExtApp.view.BookView',
        extend: 'Ext.grid.Panel',
        alias: 'widget.booklist',
        title: 'Book List',
        store: 'bookstore',
        initComponent: function()
            this.tbar = [
                text: 'Add Book',
                action: 'add',
                iconCls: 'book-add'
            ];

            this.columns = [
                
                    header: 'Title',
                    dataIndex: 'title',
                    flex: 1
                ,
                
                    header: 'Author',
                    dataIndex: 'author'
                ,
                
                    header: 'Price',
                    dataIndex: 'price',
                    width: 60
                ,
                
                    header: 'Quantity',
                    dataIndex: 'qty',
                    width: 80
                
            ];
            this.callParent(arguments);
        
    );



    Ext.application(
        name:'ExtApp',
        stores: [
        'ExtApp.store.BookStore'
    ],
        launch: function()
            Ext.widget('booklist',
                width: 800,
                height: 300,
                renderTo: Ext.getBody()
            );
        
    );
)

【讨论】:

它有效。非常感谢你。我看到您还在应用程序中添加了以下行:stores: ['ExtApp.store.BookStore']。如果我像您添加的那样定义商店,并且如果我使用“requires”,那么有什么区别?例如需要:['ExtApp.store.BookStore'] @Sonn 基本上requires 用于在加载该组件之前添加其他视图,stores 用于加载存储。 @Sonn 如果您将商店添加到您的 app.js 的 stores 配置中,则会创建一个实例。如果将其添加到要求中,则将加载该文件。这就是区别。对于您使用一次的商店,您分配一个 storeId 并将它们添加到 app.js,如果您重复使用它们(多个实例),您需要使用。 感谢大家的帮助! :)

以上是关于ExtJS:如何使用别名/xtype 来引用其他组件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用别名从 ExtJS 中的商店引用模型?

如何使用 xtype 文件字段(extjs 4.1.0)限制文件类型?

ExtJs xtype类型介绍

具有多种 xtypes 的 ExtJS 5 网格小部件列

extjs中form中的frame:true表示啥

Extjs 4.1 提交表单 - 如何在 xtype: displayfield 中获取值