2016-11-25 13 views
7

Tarih seçicinin görüntülendiği bir aydaki birkaç tarihi vurgulıyorum. Bu, yukarıda denetleyicisi bir Ajax çağrısından ayarlı bir değişkendir tarih işleve nesne Seçici bileşeniEkstra tarih seçici. Sorun, aydaki vurgulama tarihlerini değiştiriyor

Ext.override(Ext.form.field.Picker, { 

    highlightDates: function (picker, dates) { 

     if (Ext.isEmpty(dates)) return; 
     for(var i = 0; i < dates.length; i++) { 
      var t = new Date(dates[i].date), 
       dtMillis = t.getTime(), 
       offset = t.getTimezoneOffset() * 60 * 1000, 
       dt = dtMillis + offset, 
       cells = picker.cells.elements; 

      for (var c = 0; c < cells.length; c++) { 
       var cell = Ext.fly(cells[c]); 
       if (cell.dom.firstChild.dateValue == dt) { 
        cell.addCls('cell-highlight'); 
        break; 
       } 
      } 
     } 
    } 
}); 

bir highlightDates işlev ekleyerek yapılır.

getDates: function (cmp) { 
    var me = this; 
    Ext.Ajax.request({ 
     url: 'someurl', 
     success: function (response) { 
      me.specificDates = Ext.JSON.decode(response.responseText).specificDates; 
     } 
    }); 
} 

Denetleyici, tarih seçicinin dinleyiciyi genişleteceği bir işlevi de içerir.

setDatesToHighlight: function(picker){ 
    picker.highlightDates(picker.picker,this.specificDates); 
} 

Son olarak, bu tarih seçici Bu dinleyici

items: [{ 
    xtype: 'datefield', 
    editable: false, 
    listeners: { 
     expand: 'setDatesToHighlight' 
    } 
}] 

genişletmek kullanılarak görünür hale getirilir çağrılan tüm çalışma ince i seçicideki ay değiştirene kadar. Edilmektedir SetDatesToHighlight denetleyici işlevini tekrar tetikleyemiyorum, böylece seçilen aylar vurgulanır.

Seçici üzerinde güncelleme yöntemini geçersiz kılabileceğimi düşünüyordum, ancak highlightDates işlevine geçmek için gereken tarih nesnesini elde etmekte zorlanıyorum.

Her türlü öneriniz için teşekkürler. Şimdi expand den update dinleyicinin değiştirebilir

Ext.override(Ext.picker.Date, { 

    update: function (e) { 
     var res = this.callParent(arguments); 

     if (!this.pickerField) { 
      return res; 
     } 

     this.pickerField.fireEvent('update', this); 

     return res; 
    }, 

    highlightDates: function (picker, dates) { 
     . . . 
    } 
}); 

:

cevap

5

Sen gibi update fonksiyonu için geçersiz kılma yerine Ext.form.field.Picker ait Ext.picker.Date ağır basan ve ekleyerek, her güncellemeye bir etkinlik ateş edebilirsiniz.

Çalışma örneği: https://fiddle.sencha.com/#view/editor&fiddle/1l94

+0

beni gerçekten yardımcı oldu ve şimdi benim hafta iyi :-) başlayacak Çok teşekkür ederim – grimmus

İlgili konular