2015年6月11日 星期四

【ExtJS】雜記

被騙去做這個 framework 的系統改寫專案,很多用法很容易寫完就忘了,所以寫一些給自己之後可以查的筆記。
注意,文中方法包含自訂實作,照抄很可能編不過


以 id 取得 component
  1. Ext.getCmp('id');
  2. // ex
  3. var lblAssignCount = Ext.getCmp('_lblAssignCount');

文字內容使用 label 物件表達
  1. {
  2. xtype: 'label',
  3. style: 'padding: 0 0 0 2px;',
  4. text: 'txt'
  5. }

初始化元件用的 store
  1. storeXXX = new Ext.data.JsonStore(
  2. {
  3. fields:
  4. [
  5. 'NAME', 'VALUE'
  6. ],
  7. data: _$XXX
  8. });
  9.  
  10. cmbBatch = new Ext.form.ComboBox(
  11. {
  12. fieldLabel: _XXX,
  13. store: storeXXX,
  14. displayField: 'NAME',
  15. valueField: 'VALUE',
  16. disabled: false
  17. });
其中 _$XXX 由後端取回
  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. if (IsPostBack)
  4. return;
  5. AppendData("XXX", getXXX());
  6. }

Jquery 前後端 ajax 溝通
  1. // client
  2. $.ajax({
  3. url: 'page.aspx',
  4. cache: false,
  5. async: false,
  6. // send
  7. data: { ID: value ,ajaxMethod:'ServSideMethodName'},
  8. type: 'post',
  9. // recv
  10. success: function (data) {
  11. person.name = data.name;
  12. person.age = data.age;
  13. },
  14. dataType: 'json'
  15. });
  16.  
  17. //serv
  18. public void ServSideMethodName()
  19. {
  20. // recv
  21. var id = GetParamNonEncrypt("ID");
  22. Person p = queryPersonInfoById(id);
  23. // send
  24. var jsonResult = new
  25. {
  26. name = p.Name,
  27. age = p.Age
  28. };
  29. Response.Write(EnJson(jsonResult));
  30. }
  31.  

指定匿名方法給 handler
  1. btnXXX= new Ext.Button({
  2. text: 'xxx',
  3. handler: function () {
  4. doSomthing();
  5. }
  6. });


JavaScript 執行階段錯誤: 無法取得未定義或 Null 參考的屬性 'xxx'
這個錯一般是它的上一層沒有正確的取到東西,才造成下一層帶不出該有的屬性或方法。
比方說,
JavaScript 執行階段錯誤: 無法取得未定義或 Null 參考的屬性 'toLowerCase'
在 record.data.ALMARK_123456.toLowerCase() 發生
錯誤是出在 ALMARK_123456 未定義,而不是 toLowerCase() 未定義。


store 取值流程
  1. // client
  2. var colMod = new Ext.grid.ColumnModel({
  3. columns: [
  4. {
  5. header: _col1,
  6. dataIndex: 'col1',
  7. width: 100,
  8. sortable: false
  9. },
  10. ...
  11. ]
  12. });
  13.  
  14. var dataSet = null;
  15. $.ajax({
  16. url: 'pageName.aspx',
  17. cache: false,
  18. async: false,
  19. // send
  20. data: { ajaxMethod: 'AjaxGetStoreData', par: par },
  21. type: 'post',
  22. // recv
  23. success: function (data) {
  24. dataSet = data.dt;
  25. },
  26. dataType: 'json'
  27. });
  28.  
  29. storeOfGrid = new Ext.data.JsonStore({
  30. fields: ['col1', ...],
  31. data: dataSet
  32. });
  33.  
  34. var myGrid = new Ext.grid.GridPanel({
  35. id: "myGrid",
  36. frame: false,
  37. border: false,
  38. enableColumnMove: false,
  39. enableColumnResize: false,
  40. autoEncode: true,
  41. height: 150,
  42. cm: colMod
  43. });
  44.  
  45. // serv
  46. public void AjaxGetStoreData()
  47. {
  48. try
  49. {
  50. string par = GetParam("par");
  51. var resultSet = someInstance.DoSomthing(par);
  52. var jsondata = new { dt = resultSet.Tables[0] };
  53. Response.Write(EnJson(jsondata));
  54. }
  55. catch (Exception ex)
  56. {
  57. }
  58. }

已設定過的 store 與 grid 重設定
  1. newStore = new Ext.data.JsonStore(
  2. {
  3. fields: [
  4. 'col1', ...
  5. ],
  6. data: newSrc
  7. });
  8. myGrid.reconfigure(newStore, colMod);

沒有留言:

張貼留言