2016-06-09 112 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>