我正在使用ExtJS的新MVC时尚编写所有组件Ext.define().
无论是在内部定义属性initComponent()还是简单地设置它们,我都有点挣扎property: 42,.
是否有广泛接受的最佳做法?
我initComponent()只是在必要时使用(即,当我想要一些动态或设置范围时),这使得保持功能更短并且让我有些丑陋this.并且总是使用它有利于我,我永远不必移动以前的属性initComponent()只是因为我想让它更具动感.
不幸的是,Sencha的文档并没有说明这一点,可用的例子似乎按照他们的意愿去做.
通常,要定义网格类型,我会这样做:
Ext.define('MyApp.view.MyGrid', {
extend: 'Ext.grid.Panel',
alias: 'widget.myGrid',
store: 'MyStore',
columns: [...],
}
Run Code Online (Sandbox Code Playgroud)
然后我通过它的xtype,'myGrid'将它添加到容器或布局中.
我想要做的是定义一个可重用的自定义组件,它可以扩展Ext.grid.Panel或接受相同的配置(例如列),但实际上是一个包含网格和其他东西的容器.
Ext.define('MyApp.components.ContainedGrid', {
extend: 'Ext.container.Container' //or Ext.grid.Panel, whatever works
alias: 'widget.containedGrid',
layout: 'card',
items: [
{someObject}, //doesn't matter what this is
{aGrid}, //the grid that should receive the configs from the caller
],
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,此组件可以像常规Ext.grid.Panel对象一样配置,这些配置应该真正应用于items数组中定义的第二个网格.
换句话说,类似下面的内容应该呈现一个包含卡片布局的窗口,其中第二张卡片应该是网格,其中列和商店提供给容器.
Ext.create('Ext.window.Window', {
title: 'hi',
layout: 'fit',
items: {
xtype: 'containedGrid',
store: myStore,
columns: [...],
},
});
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,我只想说提供给容器的配置适用于其中一个组件,但我不知道如何执行它.有什么想法吗?
编辑: 简而言之,我要做的是创建一个像网格一样配置的组件,但实际上是一个包含网格的容器,以及其他一些东西.这个组件将被多次使用,所以我想把它打包成一个可重用的组件.
panel({})及其所有内容如grid,form和想要将精确克隆呈现给另一个面板是否有办法实现它..是否可以使用panel.getEl()或其他任何方式...请帮忙
什么是创建/绑定KeyMaps到视口的最佳位置?
给出一个非常简单的Viewport,如下所示:
Ext.define('EmptyTemplate.view.Viewport', {
extend: 'Ext.container.Viewport',
requires:[
'Ext.layout.container.Fit',
'EmptyTemplate.view.Main'
],
layout: {
type: 'fit'
},
items: [{
xtype: 'app-main'
}],
listeners: {
afterrender: {
fn: function(){
// map one key by key code
this.keyMap = Ext.create('Ext.util.KeyMap', this.el, {
scope: this,
key: Ext.EventObject.ENTER,
fn: function () {
console.log("enter pressed");
}
});
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
什么是创建KeyMaps的正确方法?