我读过的所有ExtJS文档和示例都建议调用这样的超类方法:
MyApp.MyPanel = Ext.extend(Ext.Panel, {
initComponent: function() {
// do something MyPanel specific here...
MyApp.MyPanel.superclass.initComponent.call(this);
}
});
Run Code Online (Sandbox Code Playgroud)
我已经使用这种模式很长一段时间了,主要的问题是,当你重命名你的类时,你还必须改变所有对超类方法的调用.这很不方便,经常我会忘记,然后我必须追查奇怪的错误.
但是看完来源Ext.extend()
,我发现,这不是我可以使用superclass()
或super()
该方法Ext.extend()
增加了原形:
MyApp.MyPanel = Ext.extend(Ext.Panel, {
initComponent: function() {
// do something MyPanel specific here...
this.superclass().initComponent.call(this);
}
});
Run Code Online (Sandbox Code Playgroud)
在这个代码中,将MyPanel重命名为其他东西很简单 - 我只需更改一行.
但我怀疑......
我没有在任何地方看到过这种情况,旧的智慧说,我不应该依赖于无证件的行为.
我没有在ExtJS源代码中找到这些superclass()
和supr()
方法的单独使用.为什么在你不打算使用它们时创建它们?
也许这些方法在某些旧版本的ExtJS中使用但现在已被弃用?但它似乎是一个非常有用的功能,你为什么要弃用呢?
那么,我应该使用这些方法吗?
我的网格中有3列的字符串过滤器.这工作正常.在第三列,其dataindex是abc
我想修改输入的值.
例如,如果我按0然后它过滤了所有具有0的数据.我想按'否'而不是0来过滤.同样,我想使用"是"而不是1来过滤数据1.
我的代码用于创建过滤器.
this.filters = new Ext.ux.grid.GridFilters({
filters: this.filter,
local: true,
autoReload: false,
});
this.features = [this.filters];
this.plugins = [this.filters];
Run Code Online (Sandbox Code Playgroud)
插入过滤器的代码.
gridEl.filter.push({
type: header.getAttribute("FILTER"),
dataIndex: header.getAttribute("DATAINDEX"),
encode: false,
metaID: header.getAttribute("M"),
});
Run Code Online (Sandbox Code Playgroud)
感谢帮助.
ExtJS提供了一个花哨的组合框,它具有许多功能 - 提前输入,允许随机输入文本,隐藏下拉列表中所有未加入已输入文本的条目.
我不想要这些功能.我想要一个选择框,其行为几乎与人们期望普通选择框在vanilla html中完全相同.
我确实希望它绑定到数据存储,我确实想要组合框附带的所有其他extjs配置好东西.我只是不希望用户/测试人员遇到一个选择框时会吓坏他们,这些选择框打破了他们现有的这些工作方式的心理范式.
那么如何才能让extjs组合框更像选择框呢?或者我是否完全使用了错误的小部件?
如何使用自定义按钮显示ExtJS消息框.
我想要一个带有自定义消息的消息框以及"取消"和"取消激活"按钮.请提出一些想法.
buttons: [{
text: "Cancel",
handler: function () {
Ext.MessageBox.hide();
//submitTicketForm();
}
},{
text: "Deactivate",
handler: function () {
Ext.MessageBox.hide();
}
}],
Run Code Online (Sandbox Code Playgroud)
我正在使用它,但没有得到任何按钮.
我正在使用Ext JS 3,我需要得到我的列标题的菜单.我试图使用网格后跟.
我的代码有点像
listeners: {
afterrender: function() {
var menu = this.headerCt.getMenu();// wrong
}
}
Run Code Online (Sandbox Code Playgroud)
但是headerCt
在Ext JS 3中显然不可用.我可以使用哪些其他可能的选项?我没有从文档中得到任何想法.
我想添加和清空项目(显示值为空,项目高度保持正常)到Ext.form.ComboBox.我在下面提到了2个链接来配置我的组合框,但它仍然没有显示空项目:
这是我的代码:
this.abcCombo = new Ext.form.ComboBox({
name : 'abcCombo',
hiddenName : 'abcCombo-id',
fieldLabel : "My Combobox",
width : 250,
editable : false,
forceSelection : true,
mode : 'local',
triggerAction : 'all',
valueField : 'id',
displayField : 'fullName',
store : new Ext.data.JsonStore({
fields : ['id', 'fullName']
}),
tpl : '<tpl for="."><div class="x-combo-list-item">{fullName} </div></tpl>'
});
Run Code Online (Sandbox Code Playgroud)
组合框存储的数据将在Ajax请求(即数据项中的3个项)之后加载.组合框只有3项(不是我预期的4项).你对我的问题有任何想法吗?!非常感谢!
这是我的组合框
{
xtype: 'combo',
fieldLabel: LANG.LOGIN_LANG,
id : 'lang',
store: [
['tr','Türkçe'],
['ru','???????'],
['en','English']
],
mode: 'local',
triggerAction: 'all',
selectOnFocus:true
},
Run Code Online (Sandbox Code Playgroud) 我有一个表单,从JSON NumberField
获取类型的值float
.如果值恰好是整数,则不显示小数位.我想一直显示2位小数.这有配置选项吗?
这是我的声明:
items: [
{
fieldLabel: 'Net Sales',
name: 'netSales',
allowBlank:false,
decimalPrecision:2
},
Run Code Online (Sandbox Code Playgroud) 我们正在使用Extjs 3.1,我们正在尝试将reactjs集成到.我们有供应商库,它有react,reacr-dom,redux和其他库被打包并包含在脚本中.
这是我的extjs代码
var CompositeViewer = Ext.extend(Ext.BoxComponent, {
itemId: 'CompositeViewer',
requires: [
'ReactDOM' //my lib file name is vendor.lib.js
],
initComponent: function() {
Ext.apply(this, {
autoEl: {
tag: 'div',
cls: 'normalize'
}
});
CompositeViewer.superclass.initComponent.apply(this, arg);
},
onRender: function(ct, position) {
CompositeViewer.superclass.onRender.apply(this, arg);
console.log(ReactDOM); //OFCOURSE ReactDOM is undefined
/// HOW TO LOAD/Render REACT APP AND OTHER LIBS
},
beforeDestroy: function() {
CompositeViewer.superclass.onDestroy.apply(this, arg);
}
});
Run Code Online (Sandbox Code Playgroud)
如何将reactjs/javascript库加载到extjs容器中需要帮助.
编辑:澄清更多.
我对模块设计模式的最佳实践有疑问.下面的代码是我们编写一些组件的方式的一个例子(我们使用ExtJs,但这不应该太重要).我们构建了很多这样的组件,我知道这与最佳实践完全不符.有任何想法清理代码?
Ext.ns("TEAM.COMPONENT");
function Foo() {
// Private vars
var privateNumber=0, myButton, privateInternalObject;
var numberField = new Ext.form.NumberField({
label : 'A NumberField!',
listeners : {
'change' : function(theTextField, newVal, oldVal) {
console.log("You changed: " + oldVal + " to: " + newVal);
}
}
});
// Some private methods
function changeNumField(someNumber) {
numberField.setValue(someNumber);
}
// Some public methods
this.publicFunctionSetNumToSomething() {
changeNumField(privateNumber);
}
/**
* Initializes Foo
*/
function init() {
// Do some init stuff with variables & components
myButton = …
Run Code Online (Sandbox Code Playgroud) extjs ×10
extjs3 ×10
javascript ×4
combobox ×2
extjs4 ×2
extend ×1
extjs-stores ×1
filter ×1
oop ×1
reactjs ×1
string ×1
superclass ×1
webpack ×1