在我目前的项目中,我使用的是ExtJs3.3.
我创建了许多具有私有变量和函数的类.例如:
MyPanel = function(config){
config = config || {};
var bar = 'bar';//private variable
function getBar(){//public function
return bar;
}
function foo(){
//private function
}
Ext.apply(config, {
title: 'Panel',
layout: 'border',
id: 'myPanel',
closable: 'true',
items: []
});
MyPanel.superclass.constructor.call(this, config);
};
Ext.extend(MyPanel , Ext.Panel, {
bar: getBar
});
Ext.reg('MyPanel', MyPanel);
Run Code Online (Sandbox Code Playgroud)
我知道在ExtJs4中做事的新方法是使用该Ext.define方法.因此,我上面的代码看起来像这样:
Ext.define('MyPanel', {
extend: 'Ext.panel.Panel',
title: 'Panel',
layout: 'border',
closable: true,
constructor: function(config) {
this.callParent(arguments);
},
});
Run Code Online (Sandbox Code Playgroud)
所以我想知道的是如何在ExtJs4中定义私有变量和函数,类似于我在ExtJs3中的方式?
换句话说,我理解该Ext.define方法将负责定义,扩展和注册我的新类,但是我应该在哪里声明javascript var,它们不是类本身的属性,而是类所需要的.
MyPanel = function(config){
//In …Run Code Online (Sandbox Code Playgroud) 我想获取所选行的姓氏字段.这个根本不起作用:
users.getSelectionModel()getSelections();
我想要一个单独的事件监听器,只要表单中的任何字段(即Ext.form.Panel)发生变化就会触发.但是,Ext.form.Panel类不会为此本身触发事件.
在表单中监听所有字段的"更改"事件的最佳方法是什么?
我正在寻找一个相当复杂的应用程序,它涉及到几个"基础"项(基本形式,基础网格等),其他项目将继承以便遵循DRY.这些基本项将具有所有继承项将触发的公共事件.既然如此,我需要某种基本控制器来监听这些项目事件.
设置控制器以便轻松继承/扩展的基本方法是什么?
我正在使用ExtJS将数据加载到网格中,并且我想在数据完全放入网格后添加一些额外的进程.
我的上下文是,在将数据放入网格后,我将检查所有行,并根据指定的条件将其中一些标记为禁用,并将工具提示放入行(解释为何禁用它).我试图使用2个事件:Grid的'afterrender'和网格存储的'加载',但它们不起作用.
因为grid's 'afterrender'在第一次网格初始化时被触发,不关心数据加载.store's 'load'当数据被预取到存储(不在屏幕上呈现)时被触发,所以我无法将该行<div>设置为禁用.
那么,什么是检测何时在网格上完全加载和渲染数据的事件?我该如何实现这个要求?
如何在文本字段中创建带图标的小按钮,就像使用datefield一样?在之前版本的ExtJS中有一个CompositeField但是无法在ExtJS 4中找到它.
我必须从我的ExtJs脚本中执行POST才能从我的数据库中删除一些内容:
Ext.Ajax.request({
url: 'deleteRole.html',
method: 'POST',
headers: {'Content-Type': 'text/html'},
waitTitle: 'Connecting',
waitMsg: 'Sending data...',
params: {
"rolename" : rolename
},
scope:this,
success: received,
failure: function(){console.log('failure');}
});
Run Code Online (Sandbox Code Playgroud)
当发送帖子时,我可以在firebug中看到字体中的rolename,但不能作为参数.我想向您展示相对于用户注册的另一篇文章(由spring:form制作).如果我检查帖子,我可以看到以下内容:
图片http://s2.subirimagenes.com/otros/previo/thump_8498731post.jpg
我可以使用@RequestParam在我的控制器中获取参数.
但在帖子中我有问题我看不到参数部分,我只能看到字体(Fuente)部分:
image2 http://s2.subirimagenes.com/otros/previo/thump_8498737delete.jpg
因此,我的弹簧控制器没有检测到任何参数.我的POST是不是有问题?
谢谢
ExtJs库中是否有一个配置可以增加Ajax请求超时?
我尝试过两种配置,但都没有帮助:
Ext.override(Ext.data.Connection, {
timeout: 60000
});
Ext.Ajax.timeout = 60000;
Run Code Online (Sandbox Code Playgroud) 我在ExtJs中有一个自定义组件,它是一个表单字段(GridField).它将网格显示为表单字段并按预期工作.观察结果如下:
单独呈现表单时(例如,在窗口或卡片布局中的第一个面板中,一切都显示正常)
如果表单不是卡片布局中的第一个面板,或者在第一次呈现时隐藏,则显示字段名称并保留所需的空间但控件不显示.
我做了一些检查,发现实际渲染了自定义组件,但所有html元素(div等)的宽度都是0.它们都有样式(宽度:0).我的猜测是因为表单面板在渲染完成时不可见.
在控制的实施方面,我正在扩展Ext.form.field.Base.在initComponent,我只是调用this.on('afterrender', this.initControl)渲染后运行附加控件的自定义代码.这里input隐藏了字段,网格呈现在它应该的位置.
我的问题是1.如何强制控件重新渲染,使宽度不再为0?2.如果当前实现错误,使用网格或其他ext组件作为表单字段的正确方法是什么?
在initComponent方法中为组件设置属性时,许多代码示例都使用Ext.apply.
示例:
initComponent: function(){
Ext.apply(this, {
items: {
xtype: 'button'
}
})},
Run Code Online (Sandbox Code Playgroud)
我的问题是,与这样做相比,这样做有什么不同:
initComponent: function(){
this.items = {
xtype: 'button'
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,它似乎更具可读性.但是我错过了从Ext.apply获得的东西吗?