Ярлыки

.Net (17) (9) 1с8 (4) 1с8.2 УП (3) документирование (1) интеграция (10) карта (1) собеседование (1) ado (1) ajax (11) ASP (1) asp.net (10) authentication (1) c# (14) coding (2) Crm Ribbon (2) csv (1) datareader (1) delegate (5) dhtml (5) exam (1) excel (10) ext (1) extjs (8) google maps (1) iis (3) javascript (33) JSON (5) linq (1) LN (5) log (1) lotus notes (5) mail (1) MS CRM (63) MS CRM 2015 (3) MS CRM 5 (48) MS CRM 6 (28) ms office (2) msi (1) MVC (1) namespace (1) oData (3) outlook (1) parent-child (2) plugin (1) program (4) Project Management (1) remote debugger (1) REST (1) SharePoint (1) SharePoint 2010 (2) Silverlight (2) soft (1) sql (13) sql reporting service (8) sql2005 (3) ssrs (2) Thread (4) tree (1) vb (6) vba (1) VSTO (1) WCF (4) wmi (1) wsc (2) xml (1) Xrm.Page (1) xslt (1)

воскресенье, 27 марта 2011 г.

ExtJs: Фильтрация данных в ComboBox , локализация DatePicker

Фильтрация данных в ComboBox (при загрузке данных и при выборе в другом комбобоксе с учетом доступности элементов), локализация DatePicker



/*
 * http://servername/ISV/serverservices/docgen/first.htm?docid=4545-fd-88 
 */

Ext.onReady(function() {

 Ext.BLANK_IMAGE_URL = '/ISV/js/ext331/resources/images/default/s.gif';

 // параметры (querystring) страницы
 var windParam = Ext.urlDecode(location.search.substring(1));

 // не задан договор или ... - выход
 if (Ext.isEmpty(windParam.docid)) {
  if (Ext.isEmpty(windParam.dealid)) {
   Ext.get('cnt').dom.innerHTML = '<p style=\'color:red\'>Не выбран документ или сделка.</p>';
   return;
  }
 }

 // очистка документа
 document.body.innerHTML = "";

 // начало урла
 var urlBegin = location.protocol + '//' + location.hostname + ":"
   + location.port;

 Ext.QuickTips.init();

 // turn on validation errors beside the field globally
 Ext.form.Field.prototype.msgTarget = 'side';

 // отслеживает была ли отправка формы на сервер
 var FormSubmitting = false;

 var bd = Ext.getBody();

 // требуется для предотвращения ошибок extjs
 bd.createChild({
    tag : 'h2',
    html : ''
   });

 // для Типа шаблона
 var comboTemplateTypeStore = new Ext.data.ArrayStore({
    fields : ['ttid', 'ttname']
   });

 // для списка документов по Типу шаблона
 var comboDocNameStore = new Ext.data.ArrayStore({
    fields : ['dnid', 'dnname', 'ttid']
   });

 // сведения о сделке и договоре, заполнится в storeDocs.onload
 var infos;

 var storeDocs = new Ext.data.Store({
  proxy : new Ext.data.HttpProxy({
   url : '/ISV/serverservices/sharedfuncs.ashx?task=getdoctypeandtemplate&docid='
     + windParam.docid
  }),
  reader : new Ext.data.JsonReader({}, []),
  remoteSort : false
 });

 storeDocs.on("load", function() {
    // debugger;
    if (FormSubmitting)
     return;

    simple.body.unmask(); // убрать Загрузка... (важно, что до
          // изменения UI)

    // {"total":4,"Message":"Ok","Status":1,"data":{"docType":[["500","Соглашение
    // об условиях сделки"],["100","Акт сдачи-приемки
    // работ"]],"template":[["{75BFACFB-2A44-E011-987D-000C29F6AE0E}","Вот
    // vasya
    // шаблон.xml","500"],["{B042A8E4-3644-E011-987D-000C29F6AE0E}","Вот
    // вам ФИО
    // шаблон.xml","500"],["{B69A1D88-3844-E011-987D-000C29F6AE0E}","AutoResponder.xml","500"],["{68F22E8B-A545-E011-987D-000C29F6AE0E}","Вот
    // vasya шаблон.xml","100"]]}}

    var resp = storeDocs.reader.jsonData;
    if (!Ext.isEmpty(resp)) {

     comboTemplateType.getStore().loadData(resp.data.docType);
     comboDocName.getStore().loadData(resp.data.template);
     infos = resp.data.info;

     comboTemplateType.setValue(infos.givendoctypeid_docid);
     if (comboTemplateType.getValue() != null)
      comboTemplateType_onselect(comboTemplateType);

    }

   });

 // в самой форме в items лучше не делать - плохо работает
 // так, через переменную все вроде бы без проблем
 var comboTemplateType = new Ext.form.ComboBox({
    mode : 'local', // !! очень важно
    fieldLabel : 'Тип шаблона',
    store : comboTemplateTypeStore,
    valueField : 'ttid',
    hiddenName : 'ttid', // при отправке в этом ключе будет
    // передан идентификатор
    // (Request["ttid"])
    displayField : 'ttname',
    triggerAction : 'all',
    typeAhead : true,
    id : 'templType',
    name : 'templType',
    editable : false,
    allowBlank : false,
    listeners : {
     // фильтрует документы по типу
     select : {
      fn : comboTemplateType_onselect
     }
    }
   });

 var comboDocName = new Ext.form.ComboBox({
  mode : 'local', // !! очень важно
  fieldLabel : 'Имя документа',
  store : comboDocNameStore,
  valueField : 'dnid',
  hiddenName : 'dnid', // при отправке в этом ключе будет передан
  // идентификатор (Request["dnid"])
  displayField : 'dnname',
  triggerAction : 'all',
  typeAhead : true,
  id : 'docName',
  name : 'docName',
  editable : false,
  allowBlank : false,
  disabled : true
   // начально неактивен, изменится при выборе Типа шаблона
  });

 // фильтрует документы по типу
 function comboTemplateType_onselect(combo, record, index) {

  if (comboDocName.disabled) {
   comboDocName.setDisabled(false);
   // нужен для правильной фильтрации первый раз
   // из-за неактивного комбобокса
   comboDocName.doQuery("", true);
  }
  // очистить значение
  comboDocName.clearValue();
  // фильтрация
  comboDocName.getStore().filter('ttid', combo.getValue());
 }

 // локализация Выбора даты
 Ext.override(Ext.DatePicker, {
    todayText : 'Сегодня',
    // minText : 'Denne dato er f&oslash;r minimum dato',
    // maxText : 'Denne dato er etter maximum dato',
    // disabledDaysText : '',
    // disabledDatesText : '',
    monthNames : ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл',
      'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'], // можно
    // переопределить в
    // Date, а на этом
    // месте забить
    dayNames : ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'], // можно
    // переопределить
    // в
    // Date,
    // а на
    // этом
    // месте
    // забить
    nextText : 'Позже',
    prevText : 'Раньше',
    // monthYearText : 'Velg m&aring;ned (Ctrl+Opp/Ned flytter
    // &aring;r)',
    // todayTip : '{0} (spacebar)',
    // okText : ' OK ',
    cancelText : 'Отмена',
    // format : 'd.m.y', // на этом месте не работает, определять в
    // экземпляре
    startDay : 1
   });

 // форма
 var simple = new Ext.FormPanel({
    labelWidth : 150,
    url : 'second.aspx',
    standardSubmit : true, // по умолчанию (false) отправляется
    // средствами AJAX, не меняя страницу
    frame : true,
    title : document.getElementsByTagName('title')[0].innerHTML,
    bodyStyle : 'padding:5px 5px 0',
    width : 500,
    defaults : {
     width : 300
    },
    monitorValid : true, // используется вместе с formBind (на
    // кнопке Далее)
    listeners : {
     afterrender : function(frm) {
      window.resizeTo(frm.getWidth(), 112 + frm.getHeight());
      frm.setHeight(bd.getHeight());
     }
    },

    // еще подогнать размеры окна или формы

    items : [comboTemplateType, comboDocName, {
       fieldLabel : 'Дата документа',
       id : 'docDate',
       name : 'docDate',
       xtype : 'datefield',
       format : 'd.m.y', // работает ТОЛЬКО на этом
       // месте, в override НЕ работает
       // dayNames : ['П','В','С','Ч','П','С','В'], // на
       // этом месте не работает, сделано на override
       value : new Date(),
       allowBlank : false
      }, {
       id : 'wpDocId',
       name : 'wpDocId',
       xtype : 'hidden',
       value : windParam.docid
      }, {
       id : 'wpDealId',
       name : 'wpDealId',
       xtype : 'hidden',
       value : windParam.dealid
      }],

    buttons : [{
       text : 'Далее',
       id : 'btnNext',
       formBind : true, // используется вместе с
       // monitorValid
       disabled : true,
       scope : this,
       type : 'button',
       handler : function(btn) {
        btn.hide();
        simple.getForm().submit({
           url : this.url,
           method : 'POST',
           scope : this
          });
       }
      }, {
       text : 'Отмена',
       handler : function() {
        close();
       }
      }]
   });

 simple.on('render', function(simple) {
    Ext.defer(function() { // так как изменяется размер формы
       // немного жду после отрисовки
       simple.body.mask('Загрузка...'); // текст
       // сообщения
       // (снимается в
       // событии
       // загрузки
       // storeDocs)
       storeDocs.load(); // загрузка данных
      }, 150);

   });
 // рисую форму
 simple.render(document.body);

});

1 комментарий:

Анонимный комментирует...

Сделай подсветку, нечитабельно