2011-11-19 28 views
7

rõ ràng tôi có một DateField:ExtJS/Sencha - Thêm nút để DateField popup, đến nay

editor : new Ext.form.DateField({ /*Ext.ux.form.Custom*/ 
     allowBlank: true, 
     format: 'm/d/Y', 
     width : 120, 
     enableKeyEvents: true, 
     listeners: { 
       'keydown' : function (field_, e_ ) { 
       field_.onTriggerClick(); 
       e_.stopEvent(); 
       return false; 
      }, 
       'focus' : function (field_ ) { 
       field_.onTriggerClick(); 
       e_.stopEvent(); 
       return false; 
      } 
     } 
    }) 

Editing của lĩnh vực này bị vô hiệu hóa. Trên bất kỳ chỉnh sửa, nó cho thấy popup, vì vậy bất kỳ ngày rõ ràng là không thể. Có cách nào để thêm vào popup một cái gì đó như nút Hôm nay, nhưng có nghĩa là rõ ràng, sau đó ngày trong lĩnh vực này sẽ được resetted đến 00.00.00?

Cảm ơn.

Trả lời

3

Bạn có thể tham chiếu đến thành phần Ext.picker.Date (chịu trách nhiệm hiển thị cửa sổ bật lên lịch) với phương thức getPicker() của DateField. Sau đó, bạn có thể tùy chỉnh văn bản của nút Today với tùy chọn cấu hình todayText và tùy chỉnh những gì sẽ xảy ra khi được nhấp bằng cách ghi đè phương thức selectToday().

(Nếu bạn muốn giữ nút Today như nó có, và thêm một nút khác thay vào đó, nó có thể được thực hiện quá, bằng cách mở rộng/tùy Ext.picker.date, nhưng nó là phức tạp hơn một chút.)

+0

dường như tôi cần thêm một nút hơn, đã thử vài phương pháp ... có thể câu trả lời của bạn - cần chỉnh sửa thành phần hoặc tạo thành phần mới? –

+0

getPicker - tôi không tìm thấy điều này ... ext 3/3/4, có thể gây ra điều này ... –

3
calendar = ..... // find the calendar component 

clearDateButton = new Ext.Button({ 
    renderTo: calendar.el.child("td.x-date-bottom,true"), 
    text: "Clear Date", 
    handler: ...... 
}) 
+0

Đây là vấn đề đối với tôi - tìm thấy nó. Ext3.3.4 –

+0

Sử dụng phương thức 'getPicker()'. – Thevs

+0

3.3.1 extjs không có nó ... anyway, tôi viết lại phương pháp và tất cả là ok bây giờ. Tnx để được giúp đỡ. –

4

Hãy thử một cái gì đó như thế này:

{ 
    xtype: 'datefield', 
    onTriggerClick: function() { 
     Ext.form.DateField.prototype.onTriggerClick.apply(this, arguments); 
     var btn = new Ext.Button({ 
      text: 'Clear' 
     }); 
     btn.render(this.menu.picker.todayBtn.container); 
    } 
} 

Nó rất phụ thuộc vào triển khai, nhưng nó hoạt động. Và bạn phải gắn cờ theo cách đó sẽ không hiển thị nút rõ ràng khác mỗi khi bạn nhấp vào trình kích hoạt.

+0

ý tưởng thú vị, nhưng gắn cờ nó - đây là một vấn đề, tôi đã cần phải viết lại vài metdods - thêm một tài sản showRest, để làm cho ý tưởng này sống :) Đây là http://www.sencha.com/forum/showthread.php?106446 -ClearableDateField –

0

Nếu bất cứ ai đang tìm kiếm một giải pháp nhỏ trong ExtJS 4 ở đây là đề nghị của tôi:

Ext.picker.Date.override({ 
     beforeRender: function() { 
      this.clearBtn = new Ext.button.Button({ 
       text: 'Clear', 
       handler: this.clearDate, 
       scope: this 
      }); 
      this.callOverridden(arguments); 
     }, 
     initComponent: function() { 
      var fn = function(){}; 
      var incmp = function(values, out){ 
       Ext.DomHelper.generateMarkup(values.$comp.clearBtn.getRenderTree(), out); 
       fn(values, out); 
      }; 
      if(this.renderTpl.length === undefined){ 
       fn = this.renderTpl.initialConfig.renderTodayBtn; 
       this.renderTpl.initialConfig.renderTodayBtn = incmp; 
      } else { 
       fn = this.renderTpl[this.renderTpl.length-1].renderTodayBtn; 
       this.renderTpl[this.renderTpl.length-1].renderTodayBtn = incmp; 
      } 
      this.callOverridden(arguments); 
     }, 
     finishRenderChildren: function() { 
      this.clearBtn.finishRender(); 
      this.callOverridden(arguments); 
     }, 
     clearDate: function(){ 
      this.fireEvent('select', this, ''); 
     } 
    }); 

Working ExtJS Fiddle

Các vấn đề liên quan