1. onRender: function (cmp, eOpts) {
this.getStudentStore().load();
},
function (cmp, eOpts) 可以写成 function ()
但 function () 不会用到 参数
2. { xtype: ''numberfield'', name: ''printNum'', fieldLabel: ''打印次数'', allowBlank: false, minValue: 0,value:0 }
xtype: ''numberfield'' 如果设置了 默认值 value:0,则 其相应的 model.js 文件中必须 以type:''int'' 来提交,
如果提交的时候 要以type:''string'' 来提交,则不要设置其 默认值。
3. Ext.widget(''listband''); Ext.widget 只能获取可视化控件
4. controller = this.getController(''listinstallfee'');
controller.init();
controller 初始化
与 Ext.application({
name: ''SysInstallFee'',
appFolder: ''/Js/AppSys/SysInstallFee/app'',
autoCreateViewport: true,
controllers: [
''Category'',
''InstallFee''
]
}); 初始化 相同
this.getController(''listinstallfee'') 获取 Controller 的一个实例
5. 在 Extjs 中经常会遇到 Id 的问题,如: listModule gridpanel
这样会把所有的 listModule 下面的 gridpanel 的控件查找出来,
返回值是gridpanel 数组,经常会引发事件的联动响应问题。应注意。。。
6. fields: [
{ name: ''createDate'', type: ''date'', dateFormat: ''c'' }
],
dateFormat: ''c'' 将日期转化为 中国时间
7. { xtype: ''datefield'', name: ''modifyDate'', fieldLabel: ''修改时间'', disabled: true, format: ''Y-m-d'' }
xtype: ''datefield'' 类型,如果加上 readOnly:true 属性 则显示普通文本框的样式,
否则显示日期控件的样式。
8. Uncaught TypeError: Cannot call method ''on'' of undefined
var listGridDetail = Ext.create(''Ext.grid.Panel'', {
一般就是由于 store 未正确加载或找不到该 store 的引用
9. var billForm = Ext.create(''Ext.form.Panel'', {
region: ''north'',
id: ''orderMainForm'',
//title: ''基本信息'', //去掉form的标题,同时在UI上不显示标题栏
10. 控件一旦设置了 Disabled = true 之后,该控件就被禁用了,因此注意:当取值的时候也就取不到值了。
11. this.getDeliveryGoodsStore().rejectChanges();
//或 Ext.StoreMgr.lookup("DeliveryGoods").rejectChanges();
//或 Ext.data.StoreManager.lookup("DeliveryGoods").rejectChanges();
以上三种写法都支持 4.0.7 撤销数据源的所有修改
12. //循环数据源
this.getImpBalanceGoodsStore().each(function (item) {
outerDetailIds += item.get("outerDetailId") + ",";
});
13. var mRecord = this.getImpBalanceGoodsStore().findRecord(''outerDetailId'', outerDetailId);
14. combobox 的数据源加载问题,在 combobox 默认只会在第一次展开的时候会请求数据源
15. extjs 有的时候后台在调试的时候,extjs 前台UI不会刷新数据源,因为请求在调试的时候会中断。
会导致调试的时候,看到的数据有可能是不是当前更新的最新数据。
16. Cannot call method ''substring'' of undefined 可能是找不到相应的控件引起这个问题。
17. var isGiftSimpleStore = Ext.create(''Ext.data.Store'', {
fields: [''abbr'', ''name''],
data: [
{ "abbr": false, "name": "否" },
{ "abbr": true, "name": "是" },
]
});
var combo_isGift = {
columnWidth: 1 / 3,
id: ''isGift'',
name: ''isGift'',
xtype: ''combobox'',
fieldLabel: ''是否赠品<font color="red">*</font>'',
blankText: ''是否赠品不能为空'',
editable: false,
allowBlank: false,
store: isGiftSimpleStore,
queryMode: ''local'',
displayField: ''name'',
valueField: ''abbr'',
value: false //默认选择项
};
//数值
var billTypeSimpleStore = Ext.create(''Ext.data.Store'', {
fields: [''abbr'', ''name''],
data: [
{ abbr: 0, name: ''连锁调拨出货'' },
{ abbr: 1, name: ''连锁调拨退货'' }
]
});
var combo_billType = {
columnWidth: 1 / 3,
id: ''combo_billType'',
name: ''billType'',
xtype: ''combobox'',
fieldLabel: ''单据类型<font color="red">*</font>'',
blankText: ''单据类型不能为空'',
allowBlank: false,
editable: false,
store: billTypeSimpleStore,
queryMode: ''local'',
displayField: ''name'',
valueField: ''abbr'',
value: 0
};
18. 验证用的是表单的提交:
mMainForm.submit
提交数据到后台用的是model的提交:
this.activeRecord.save
active.destroy
19.
<a>. //set activeRecordExpenseClaimDetail
var mForm = Ext.getCmp(''expenseclaimdetailMainForm'');
var mNewRecord = new AcnExpenseClaim.model.ExpenseClaimDetail();
//mNewRecord.set(mForm.getValues());
mForm.getForm().updateRecord(mNewRecord); //将form中的数据放到model中去
<b>.var mNewRecord = new PurDelivery.model.DeliveryGoods();
//mNewRecord.set(''isValid'', true);
//mNewRecord.set(''isDel'', false);
Ext.getCmp(''hd_orderId'').setValue(this.activeRecord.data.purchaseId);
Ext.getCmp(''orderDocNo'').setValue(this.activeRecord.data.purchaseDocNo);
mNewRecord.set(''deliveryId'', Ext.getCmp(''PID'').getValue());
//将form中的值反映到 model
mMainFormDetail.getForm().updateRecord(mNewRecord);
mStore.add(mNewRecord);
解释:
//只是将赋值给控件,并没有将值赋值给model,而form 绑定的是model,所以不会将最新值反映到form中显示出来,
//要加上 mMainFormDetail.getForm().updateRecord(mNewRecord); 强值将最新值反应到model,从而反映到form中显示出来
//结论:值 -> model -> form绑定
Ext.getCmp(''orderDocNo'').setValue(this.activeRecord.data.purchaseDocNo);
20. 数据源加载完成后再执行后续代码
this.getDictGoodsPriceStore().load({
callback: function (records, operation, success) {
Ext.getCmp(''winExpSpecialGoods'').getForm().loadRecord(record);
Ext.getCmp(''expSpecialGoodsMainForm'').show();
},
scope: this
});
21. 级联
//第一个combo 值发生改变的时候改变第二个combo的数据源
doSelect_comboGrid_warehouseId: function (me, record, index, eOpts) {
Ext.getCmp(''hd_warehouseId'').setValue(record.data.id);
Ext.getCmp(''comboGrid_warehouseLocId'').setValue('''');
var mStore = this.getDictWarehouseLocStore();
var mProxy = mStore.getProxy();
var extraParamsObj = new Object();
extraParamsObj.warehouseId = record.data.id;
mProxy.extraParams = extraParamsObj;
mStore.load();
},
//数据源加载前把级联条件带进去
onDictWarehouseLocStoreBeforeLoad: function (store, operation, eOpts) {
var extraParamsObj = new Object();
var WarehouseId = Ext.getCmp(''hd_warehouseId'').getValue();
if (WarehouseId) {
extraParamsObj.WarehouseId = WarehouseId;
}
store.getProxy().extraParams = extraParamsObj;
},
22. extjs 统计行
////begin 追加统计行到store 后面
//output = output.Substring(0, output.Length - 1); //去掉‘]’
//RptRequirementTrace mEmptyRow = new RptRequirementTrace();
//RptRequirementTrace mTotalRow = new RptRequirementTrace();
//mTotalRow.requirementQuantity = 107;
//var outputEmptyRow = JsonConvert.SerializeObject(mEmptyRow, new IsoDateTimeConverter());
//var outputTotalRow = JsonConvert.SerializeObject(mTotalRow, new IsoDateTimeConverter());
//output = output + "," + outputEmptyRow;
//output = output + "," + outputTotalRow;
//output = output + "]";
////end 追加统计行到store 后面
23. 解决 统计行的 显示 ‘合计:’字样问题,
//行号
function summaryRendererRowNo(value, metaData, record, rowIndex, colIndex, store, view) {
if (rowIndex + 1 == store.getCount()) {
return "";
} else {
metaData.style = ''background-color:#ECECEC;'';
}
return rowIndex + 1;
}
//合计
function summaryRendererWithText(value, metaData, record, rowIndex, colIndex, store, view) {
if (rowIndex + 1 == store.getCount())
return "<span style=''color:black;font-weight:bold;''>合计:</span>";
return value;
}
//合计项(千分号显示)
function summaryRenderer(value, metaData, record, rowIndex, colIndex, store, view) {
if (rowIndex + 1 == store.getCount())
return "<span style=''color:black;font-weight:bold;''>" + Ext.util.Format.number(value, ''0,000.00''); +"</span>";
return Ext.util.Format.number(value, ''0,000.00'');
}
//列表记录Grid
var checkboxModel = Ext.create(''Ext.selection.CheckboxModel'', { checkOnly: false });
var listGrid = Ext.create(''Ext.grid.Panel'', {
id: ''requirementtraceMainGrid'',
margin: ''5px 5px 5px 5px'',
//selModel: checkboxModel,
store: ''RptRequirementTrace'',
dockedItems: [{
xtype: ''pagingtoolbar'',
store: ''RptRequirementTrace'',
dock: ''bottom'',
displayInfo: true
}],
tbar: [{
text: ''图形显示'',
scale: ''medium''
}, {
text: ''导出'',
scale: ''medium''
}, {
text: ''打印'',
scale: ''medium''
}],
columns: [
{ xtype: ''rownumberer'', header: ''序号'', width: 40, align: ''center'', titleAlign: ''left'', renderer: summaryRendererRowNo },
{ xtype: ''datecolumn'', header: ''请购日期'', dataIndex: ''requirementDate'', width: 120, format: ''Y-m-d'' },
{ header: ''请购订单号'', dataIndex: ''docNo'', width: 100 },
{ header: ''供应商名称'', dataIndex: ''supplierName'', width: 100 },
{ header: ''采购员'', dataIndex: ''buyerName'', width: 100 },
{ header: ''商品编码'', dataIndex: ''goodsCode'', width: 100 },
{ header: ''商品名称'', dataIndex: ''goodsName'', width: 100 },
{ header: ''商品规格'', dataIndex: ''goodsSpec'', width: 100 },
{ header: ''等级'', dataIndex: ''goodsLevelName'', width: 100 },
{ header: ''色号或坑距'', dataIndex: ''colorNo'', width: 100 },
{ header: ''单位'', dataIndex: ''unit'', width: 100, renderer: summaryRendererWithText },
{ header: ''请购数量'', dataIndex: ''requirementQuantity'', width: 100, align: ''right'', titleAlign: ''left'', renderer: summaryRenderer },
{ header: ''采购数量'', dataIndex: ''purchaseQuantity'', width: 100, align: ''right'', titleAlign: ''left'', renderer: summaryRenderer },
{ header: ''厂家发货数量'', dataIndex: ''deliveryQuantity'', width: 100, align: ''right'', titleAlign: ''left'', renderer: summaryRenderer },
{ header: ''估价入库数量'', dataIndex: ''impEvaluateQuantity'', width: 100, align: ''right'', titleAlign: ''left'', renderer: summaryRenderer },
{ header: ''未到货数量'', dataIndex: ''nonarrivalQuantity'', width: 100, align: ''right'', titleAlign: ''left'', renderer: summaryRenderer }
]
});
解决 ''千分号'' 显示问题:
grid下的 columns中 xtype:''numbercolumn'',format:''0,000.00''
总是显示 123.456,78 而不是 123,456.00
原因:Ext.util.Format.number 类源代码 中的
thousandSeparator: '','',
decimalSeparator: ''.'',
与 本地文件 ext-lang-zh_CN.js
if (Ext.util.Format) {
Ext.apply(Ext.util.Format, {
thousandSeparator: ''.'',
decimalSeparator: '','',
发生冲突
24. Ext.Ajax.request 请求
// 准备新数据
var mNewRecord = new AcnReceive.model.Receive();
mNewRecord.set(''openDate'', new Date());
Ext.Ajax.request({
url: ''/AcnReceive/GetCurrentOperatorDeptName'',
method: ''post'',
success: function (response) {
var deptName = response.responseText.deptName;
mNewRecord.set(''openDepartmentName'', deptName);
}
});