2016-06-09 111 views
2

有誰知道如何使SAPUI5控制sap.m.DatePicker只讀?我希望能夠向用戶顯示標準日曆界面,如果他點擊小日曆圖標但不允許用戶實際更改日期的SAPUI5日期選擇器只讀

目前唯一的解決方法是將函數附加到更改事件,並將value屬性重置爲原始值。但這並不好,也不漂亮。

這是一個帶DatePicker的JSBin示例。

jQuery(function() { 
    var picker = new sap.m.DatePicker();  
    picker.detachEvent("change"); 

    // is there a better solution than this: `?????? 
    picker.attachChange(function(oEvent){ 
    oEvent.getSource().setDateValue(new Date()) 
    });  

    picker.placeAt('content'); 
}); 

http://jsbin.com/racoje/edit?html,js,console,output

回答

1
  • 重寫.setDateValue()方法爲實例將禁用日期選擇。

sap.m.DatePicker源代碼github值得一看。

var picker = new sap.m.DatePicker(); 
    picker.setDateValue = function() {}; 

http://jsbin.com/yirademuwa/1/edit?html,js,output


  • 延伸的樹液控制通過@TimMalich覆蓋setDateValue方法,最終的解決方案

$.sap.declare('YOUR.NAMESPACE.DatePicker'); 
sap.m.DatePicker.extend("YOUR.NAMESPACE.DatePicker", { 
    renderer : {}, 
    init: function() { 
     sap.m.DatePicker.prototype.init.apply(this); 
    }, 
    setDateValue : function(){} 
}); 

<mvc:View xmlns="sap.m" controllerName="YOUR.NAMESPACE.controller.VIEW" 
      xmlns:custom="YOUR.NAMESPACE"> 
    <custom:DatePicker ... /> 
</mvc> 
2

由於bfmags我發現略有不同的解決方案。我需要在UI中多次使用這種行爲,並使用XML視圖。這就是爲什麼我擴展了sap控件來覆蓋setFormValue方法,正如bfmags所建議的那樣。

$.sap.declare('YOUR.NAMESPACE.DatePicker'); 
sap.m.DatePicker.extend("YOUR.NAMESPACE.DatePicker", { 
    renderer : {}, 
    init: function() { 
     sap.m.DatePicker.prototype.init.apply(this); 
    }, 
    setDateValue : function(){} 
}); 

簡單的XML查看示例:

<mvc:View xmlns="sap.m" controllerName="YOUR.NAMESPACE.controller.VIEW" xmlns:custom="YOUR.NAMESPACE"> 
    <custom:DatePicker 
     value="{ 
      path : 'YourModel>YourDate', 
      type: 'sap.ui.model.type.Date', 
      formatOptions: { 
       pattern: 'dd.MM.yyyy' 
      } 
     }" 
    /> 
</mvc:View>