我正在尝试通过post方法提交表单,使用extjs 4.2.1中的standardSubmit在新窗口中打开一个url
在getFields函数中,ext-all-debug.js抛出错误
getFields: function() {
return this.monitor.getItems();
},
Run Code Online (Sandbox Code Playgroud)
未捕获的TypeError:无法调用null的方法'getItems'
在这里,显示器对象被示为空.
单击链接将打开一个包含表单的消息窗口.单击"是",表单必须在打开新窗口的情况下提交.
我的表格是:
initComponent: function() {
var me = this;
Ext.applyIf(me, {
items: [
{
xtype: 'form',
flex: 1,
itemId: 'importForm',
layout: {
align: 'center',
type: 'vbox'
},
bodyPadding: 20,
standardSubmit: true,
items: [
{
xtype: 'hiddenfield',
itemId: 'user_id',
fieldLabel: 'Label',
name: 'user_id'
},
{
xtype: 'label',
itemId: 'formLabel',
padding: 5,
text: 'My Label'
},
{
xtype: 'container',
margin: '10 0 0 0',
layout: {
align: 'middle',
pack: …
Run Code Online (Sandbox Code Playgroud) 我是Extjs的新手并使用Extjs v4.2.0.要查找对象,我可以使用Ext.getCmp(id)或Ext.ComponentQuery.query(属性).哪个更好用,速度更快?
我在单击时显示提示,并且希望能够限制用户可以输入的字符数。在extjs文档中,我找到了有关maxLength属性的信息,听起来这正是我想要的。我发现如果将maxLength设置为所需的字符数限制,则extjs控件会自动限制我的字符数。到目前为止,情况并非如此,但是它似乎确实以某种方式验证了输入,因为当超出maxLength限制时,该文本框用红色勾勒出轮廓。这是我当前的代码:
var prompt, textArea;
prompt = Ext.MessageBox.prompt("Hello!", "Hint");
textArea = prompt.down('textarea');
textArea.maxLength = 140;
Run Code Online (Sandbox Code Playgroud)
las,这无法阻止用户输入超过140个字符。
有谁知道如何限制像这样的MessageBox中的字符数?或者有人可以告诉我为什么maxLength无法按我期望的方式工作?
谢谢
- 编辑 -
正如newmount指出的那样,看来正确的解决方案是在textarea标记上设置maxLength属性。这是w3学校的示例链接:http : //www.w3schools.com/tags/att_textarea_maxlength.asp
我的问题是选择正确的标签。对于ExtJS中的文本区域,它看起来像:
// true denotes multiline and causes Ext to use textarea tag for input
var prompt = Ext.MessageBox.prompt("Hello!", "Hint", "", "", true);
prompt.textArea.inputEl.set({
maxLength: 140
});
Run Code Online (Sandbox Code Playgroud)
似乎成功的一半是在生成的标签中选择正确的DOM元素。希望这对以后的人有所帮助!
注意: Opera或IE9及更早版本不支持maxLength属性(有关引用,请参见w3学校链接)。
我是Extjs的新手.我有场的形式.我需要为特定领域设定焦点.这是我正在使用的代码.
var priceTFLme = {
xtype: 'numberfield',
id:'priceLme',
fieldLabel: 'Price',
name: 'price',
value: bidOffer,
minValue: 0,
maxValue: 100,
allowDecimals: true,
decimalPrecision: 3,
step: 0.005,
vtype: 'natural'
};
var quantityTFLme = {
xtype: 'textfield',
id: 'quantityLme',
fieldLabel: 'Quantity',
value: '',
editable: true,
hasFocus: true,
vtype: 'natural',
listeners: {
afterrender: function(field) {
field.focus(false, 1000);
}
}
};
var formLME = new Ext.FormPanel({
labelWidth: 85,
frame:true,
id:'lmeHeaders',
bodyStyle:'padding:10px 10px 0',
defaults: {width: 225},
defaultType: 'textfield',
items: [quantityTFLme, priceTFLme ],
buttons: [{
id:'buyIdLME',
handler: …
Run Code Online (Sandbox Code Playgroud) 我很好奇idProperty
模型中的一个实现,读者中的一个idParam
实现,然后是代理和clientIdProperty
模型的实现
我们如何以正确的方式使用它们?
这是我的代码:
function sim(proxy, data, delay) {
if (typeof data !== 'string') {
data = Ext.JSON.encode(data);
}
proxy.url = '/echo/json/';
proxy.actionMethods.read = "POST";
proxy.extraParams.json = data;
proxy.extraParams.delay = typeof delay == 'undefined' ? 0 : delay;
}
Ext.define('MyStore', {
extend:'Ext.data.Store',
fields:['id','name'],
proxy:{
url:'whatever',
type:'ajax',
reader:{
type:'json'
}
}
});
var myStore = new MyStore();
sim(myStore.proxy, [{id:2,name:'neil'},{id:3,name:'expert wanna-be expert wanna expert'}], 0);
Ext.define('MyForm', {
extend: 'Ext.form.Panel',
initComponent: function() {
var me = this;
Ext.applyIf(me, {
items: [
{
xtype: 'combobox',
editable:false,
store: …
Run Code Online (Sandbox Code Playgroud) 我正在使用ExjJs 4.2.我有两个显示不同数据的网格.在一个javascript文件中,我必须包括两个网格.我正在为第一个网格加载商店
var store = Ext.create('Ext.data.Store', {
model: 'Writer.Person',
autoLoad: true,
proxy: {
type: 'ajax',
url : 'findPatientRecordAction',
reader: {
type: 'json',
successProperty: 'success',
root: 'data',
messageProperty: 'message'
},
writer: {
type: 'json',
encode: true,
root: 'data'
},
fields: ['id','notes', 'startDate', 'endDate'],
},
});
Run Code Online (Sandbox Code Playgroud)
JSON对象库如下所示:
"data":[{"id":35,"notes":"hiii","startDate":"2013-04-30","endDate":"2013-05-02"}]},"details" :[{ "ID":14, "文件": "docpath12345", "日期": "2013年4月28日"}]
实际上,第一个网格将仅显示JSON的"数据"部分,第二个网格将显示JSON的"详细信息"部分.理想情况下,我不应该为第二个网格再次加载商店对象(我现在正在做什么).我想再声明一个商店类型变量并重用'store'的值(商店的'documents'部分)成为将第二个网格存储为
我现在像这样加载第二家商店
var store2 = Ext.create('Ext.data.Store',{
model: 'Writer.Document',
autoLoad: true,
proxy: {
type: 'ajax',
url : 'findPatientRecordAction',
reader: {
type: 'json',
successProperty: 'success',
root: 'details',
messageProperty: 'message'
}, …
Run Code Online (Sandbox Code Playgroud) 下面,我有一个我想用javascript格式化的数字.但它返回NaN.
var v = "153,452.47";
alert(Math.round(v));
Run Code Online (Sandbox Code Playgroud)
您可以使用以下小提琴:示例
我们如何格式化具有分隔符的数字字符串?
如果我在 extjs 中有一个表单,我可以使用它获取数据
var values = form.getValues();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这只返回启用的字段。我也有禁用的字段。例如,我有一个禁用的 ID 字段,因为显然您不想修改 ID。所以 getValues() 方法在 IMO 中非常无用。
还有 getRecord().data 为我提供了表单中的所有值。
form.getRecord().data
Run Code Online (Sandbox Code Playgroud)
伟大的!但是所有的数据都是数据外的,它不反映表单中所做的修改。
我也查看了getFieldValues(),但同样只给了我启用的字段的值。
有没有什么方法可以让我完全按照屏幕上的形式提供所有数据?还是我必须写一个巨大的黑客来给自己这个功能?
我的问候 !
我试图通过热键专注于第一个pagingtoolbar的按钮.例如,当它将按CTRL + - >组合时,焦点将在pagingtoolbar的第一个启用按钮上.
这时我可以获得fisrt禁用按钮:
Ext.ComponentQuery.query('pagingtoolbar button{isDisabled()}')[0]
Run Code Online (Sandbox Code Playgroud)
但我需要这样的代码:
Ext.ComponentQuery.query('pagingtoolbar button{isEnabled()}')[0]
Run Code Online (Sandbox Code Playgroud)
我以为在Ext.button.Button中有这样的方法,但我找不到它.显然,我可以通过另一种方式解决我的问题,例如,我可以通过以下代码获取分页工具栏中的所有启用按钮:
var buttons = Ext.ComponentQuery.query('pagingtoolbar button');
var en_buttons = [];
for(var i=0;i<buttons.length;i++){
if( !buttons[i].isDisabled() )en_buttons.push(buttons[i]);
}
en_buttons[0].focus(false,100);
Run Code Online (Sandbox Code Playgroud)
但我相信没有必要编写这样的代码,必须通过一行代码来解决.
关于,A