我在任何地方都找不到。在sap.ui.table.Table控件中是否可以告诉它调整所有列宽的大小,以便其内容完全可见?我在表或列实例上都没有看到任何属性/方法。
不支持吗?
非常感谢。
我的SAPUI5应用程序有问题.我使用Eclipse和phonegap导出我的应用程序,如果我使用以下资源用于sap-ui-core.js导出的应用程序无法在我的平板电脑上启动.通过加载浅蓝色屏幕停止屏幕.我从这里下载了运行时sapui5
<script id="sap-ui-bootstrap" src="resources/sap-ui-core.js"
type="text/javascript" data-sap-ui-libs="sap.m, sap.ui.commons, sap.ui.ux3, sap.ui.table, sap.ui.core, sap.viz, sap.suite.ui.commons, sap.uxap, sap.ui.layout"
data-sap-ui-theme="sap_bluecrystal">
</script>
Run Code Online (Sandbox Code Playgroud)
现在,如果我将src-path更改为sapui5服务器上的sap-ui-core.js文件,则可以正常工作并运行应用程序.上面的路径是正确的,因为我的其他文件,如css文件正确加载(相同的根)
<script id="sap-ui-bootstrap" src="https://sapui5.netweaver.ondemand.com/resources/sap-ui-core.js"
type="text/javascript" data-sap-ui-libs="sap.m, sap.ui.commons, sap.ui.ux3, sap.ui.table, sap.ui.core, sap.viz, sap.suite.ui.commons, sap.uxap, sap.ui.layout"
data-sap-ui-theme="sap_bluecrystal">
</script>
Run Code Online (Sandbox Code Playgroud) 我正在使用名称空间中的Table对象SAPUI5's sap.ui.table:
var oTableOverview = new sap.ui.table.Table();
在上rowSelectionChange,当我选择一行时,我填充了另一张表,我们称它为oTableDetail,其中已填充了一些数据。
当从第一个表中取消选择该行时,我想清除第二个表的内容,为此,我使用了:
oTableDetail.destroyColumns();
oTableDetail.unbindRows();
取消选择行时,出现以下错误:
TableRenderer.js:6未捕获的TypeError:无法读取未定义的属性“ shouldRender”
我找到了方法shouldRender的的sap.ui.table.Column类,但我不知道为什么会在细胞在这种情况下重新呈现。
我还注意到,如果我单独使用oTable.destroyColumns()或,则不会出现该错误。oTable.unbindRows()
我正在使用SAPUI5的“ 1.38.11”版本。
您能帮我确定为什么会这样吗?
编辑1:可能的解决方法是使用:
oTableDetail.setModel(new sap.ui.model.json.JSONModel({}));
oTableDetail.destroyColumns();
尽管我仍然不知道为什么前面提到的代码无法正常工作。
编辑2:我觉得有点奇怪的行为:
试图添加一个setTimeout像这样工作(错误没有发生):
oTable.destroyColumns();
setTimeout(function(){oTable.unbindRows();},50);
但是,即使延迟时间更长,也无法通过其他方式运行(错误仍然出现):
oTable.unbindRows();
setTimeout(function(){oTable.destroyColumns();},50);
我想处理Text控件(sap.m)中值的颜色.如果值为"TRUE",则颜色为绿色.否则,如果值为红色,则为红色"FALSE".
<Text
class="{= ${HintTable>IS_ENABLED} === 'TRUE' ? 'greenTextColor' : redTextColor'}"
text="{HintTable>IS_ENABLED}"
/>
Run Code Online (Sandbox Code Playgroud)
但它似乎没有奏效.我的意思是,class不能接受"greenTextColor"也不"redTextColor".
我做错了什么?
我有一个与不同语言的小数的数字格式有关的问题.对于CURRENCY控件,系统根据来自URL参数的语言采用正确的格式; 美国和德国
?sap-ui-language=DE 或?sap-ui-language=US
对于具有type=Number属性的输入字段,无论语言设置如何,始终使用DOT作为小数分隔符.有这个问题的解决方案吗?我有一个动态的sap.ui.table填充(对于行和列),有些行有数字字段,有些行作为文本字段,所以我从后端动态发送dataformat,如下所示;
temp = new sap.m.Input(sColumnId + index,{ value:"{path: '" + sColumnId + "'}" , type:"{DATATYPE}", textAlign:"Right", liveChange:[handle_livechange,this], change:[handle_change, this] , editable:"{path:'EDITABLE', type:'sap.ui.model.odata.type.String'}" }
Run Code Online (Sandbox Code Playgroud)
由于某些行是基于文本的,我不能硬编码格式化程序,如下所示;
type:'sap.ui.model.type.Float', formatOptions : { groupingEnabled: true, groupingSeparator: '.', decimalSeparator : ',', minFractionDigits: 2}}"
Run Code Online (Sandbox Code Playgroud)
我尝试了自定义格式化程序但不知何故在动态表格中找不到我的格式化程序功能.我试过onChange方法动态格式化,但在这种情况下我的javascript计算不起作用.
如果我可以基于具有表达式绑定的行值来控制格式化选项,它也将解决我的问题,但是下面的代码不起作用.
temp = new sap.m.Input(sColumnId + index,{ value:"{path: '" + sColumnId + ", =${DATATYPE} === 'Number' ? type:'sap.ui.model.type.Float', formatOptions : { groupingEnabled: true, groupingSeparator: '.', decimalSeparator : ',', minFractionDigits: 2} : type:'sap.ui.model.type.String' …Run Code Online (Sandbox Code Playgroud) 我想要的:快速将文件复制/移动到路径.也许从sapui5上的FileUploader从File/Blob对象获取FileEntry.
输入:FileUploader
输出:文件对象所以我通过执行以下操作选择它时得到文件:
sap.ui.getCore().byId('file-uploader-id').oFileUpload.files[0];
Run Code Online (Sandbox Code Playgroud)
所以我必须将它复制到另一个位置:" cordova.file .externalCacheDirectory".但FileUploader不为所选项提供完整路径值(出于安全原因).
我尝试了什么:
var sPath = URL.createObjectURL(oFile);
var pCopyFrom = new Promise((resolve, reject) => {
window.resolveLocalFileSystemURL(sPath, resolve, reject);
});
var pCopyTo = new Promise((resolve, reject) => {
var sExternalCachePath = cordova.file.externalCacheDirectory;
window.resolveLocalFileSystemURL(sMediaPath, resolve, reject);
});
Promise.all([pCopyFrom, pCopyTo]).then(aValues => {
aValues[0].moveTo(aValues[1], aValues[0].name, cbSuccess, cbError);
});
Run Code Online (Sandbox Code Playgroud)
结果:
解决方案似乎不起作用,因为生成的路径不可用(错误代码5),此路径无效,因此使用它.
可能的方法:
目前的解决方案是什么(但真的很慢):
使用FileWritter编写文件.如果我有路径并且我将上述代码用于视频(持续5秒),则花费不到1秒(感谢FileEntry)来复制/移动它(使用摄像头捕获或使用cordova插件进行视频捕获-媒体捕获 …
我有一个XML片段,并在XML视图的多个地方使用它。
<IconTabFilter text="ABC" key="1" icon="sap-icon://alphabetical-order">
<content>
<Table id="table1" width="auto" items="{path:'/ContactSet',parameters:{expand:'BusinessAddress,HomeAddress,OtherAddress,Photo'},filters:[{path:'Surname',operator:'StartsWith',value1:'A'},{path:'Surname',operator:'StartsWith',value1:'B'},{path:'Surname',operator:'StartsWith',value1:'C'}]}" noDataText=" {worklistView>/tableNoDataText}" busyIndicatorDelay="{worklistView>/tableBusyDelay}" growing="true" growingScrollToLoad="true" updateFinished="onUpdateFinished">
<headerToolbar>
<core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesHeader" type="XML"/>
</headerToolbar>
<columns>
<core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesColumns" type="XML"/>
</columns>
<items>
<core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesRows" type="XML"/>
</items>
</Table>
</content>
</IconTabFilter>
<IconTabSeparator icon="sap-icon://process"/>
<IconTabFilter text="DEF" key="2" icon="sap-icon://alphabetical-order">
<content>
<Table id="table2" width="auto" items="{path:'/ContactSet',parameters:{expand:'BusinessAddress,HomeAddress,OtherAddress,Photo'},filters:[{path:'Surname',operator:'StartsWith',value1:'D'},{path:'Surname',operator:'StartsWith',value1:'E'},{path:'Surname',operator:'StartsWith',value1:'F'}]}" noDataText="{worklistView>/tableNoDataText}" busyIndicatorDelay="{worklistView>/tableBusyDelay}" growing="true" growingScrollToLoad="true" updateFinished="onUpdateFinished">
<headerToolbar>
<core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesHeader" type="XML"/>
</headerToolbar>
<columns>
<core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesColumns" type="XML"/>
</columns>
<items>
<core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesRows" type="XML"/>
</items>
</Table>
</content>
</IconTabFilter>
Run Code Online (Sandbox Code Playgroud)
但是视图加载时间太长,尤其是在WEBIDE中。
原因是它多次加载了类似的片段文件。这是一个证据:
问题是如何改善性能?
我不想重复代码,我需要将代码的那一部分放在一个片段中,但是我希望我的浏览器不会多次加载相同的文件。
我在 XML 文件中的屏幕上有几个元素
<layout:VerticalLayout xmlns:layout="sap.ui.layout" xmlns="sap.m">
<Input />
<Button />
<!-- ... -->
</layout:VerticalLayout>
Run Code Online (Sandbox Code Playgroud)
如何添加布局重力或垂直对齐控件之类的内容?例如,我想要元素位于屏幕中央。
不管这个
<List id="list" items="{/Report}">
<items>
<ObjectListItem press="onSelect" title="{TYPE}"> </ObjectListItem>
</items>
</List>
Run Code Online (Sandbox Code Playgroud)
也不是这个
<List id="list" items="{/Report}" itemPress="onSelect">
<items>
<ObjectListItem title="{TYPE}"> </ObjectListItem>
</items>
</List>
Run Code Online (Sandbox Code Playgroud)
火灾
onSelect : function (oEvent) {
'use strict';
console.log("onSelect");
}
Run Code Online (Sandbox Code Playgroud)
在控制器中.
可能是什么原因导致的 控制台中没有相关的错误消息.
在我的 UI5 应用程序中,我有一个表,其中每一行都包含一个sap.m.Switch,它通过 绑定到模型formatter,因为数据来自数据库作为1/ 0,而不是true/ false,并且这可能打破了默认的双向数据绑定。
为了根据此开关的编辑值更新数据模型,我实现了以下change-event:
onChangeSwitch: function onChangeSwitch(oEvent) {
let context = oEvent.oSource.getBindingContext();
let itemIndex = context.sPath.substr(1);
let oModel = this.getView().byId("idTablePersons").getModel();
oModel.oData[itemIndex].isPersonActive = (oEvent.mParameters.state) ? 1 : 0;
oModel.refresh();
}
Run Code Online (Sandbox Code Playgroud)
它有效,但我不确定这是否是实现此类逻辑的正确方法。
更改sap.m.Switch值后是否有更新模型的标准方法?
sapui5 ×10
javascript ×4
android ×2
cordova ×2
performance ×2
browser ×1
caching ×1
data-binding ×1
jquery ×1
localization ×1