如何检索View/ Fragmenta sap.ui.core.Control属于?
BR克里斯
我在Web IDE for SAPUI5中创建了一个Master-Details应用程序.
我将我的应用程序连接到OData服务.连接参数已存储在manifest.json.
我想阻止我的UI5应用程序在从OData端点请求数据时使用批处理请求.
我知道如何使用以下代码禁用特定请求的批处理请求:
var oDataModel = this.getModel();
oDataModel.setUseBatch(false);
Run Code Online (Sandbox Code Playgroud)
但问题是我无法在onInit功能中使用它.我可以设置一些参数manifest.json来禁用批量请求,即使程序加载时也不使用批处理吗?
由于SAPUI5/OpenUI5中的图标集非常有限,我想在sap.ui.core.Icon中显示glyphicons和/或font-awesome图标.
怎么能实现这一目标?
无论如何我可以获得当前的路线名称吗?有一个getRoute功能,但我必须自己传递路由名称.如果有办法从控制器中的路由器对象获取所有路由的名称,它对我有帮助.例如:
this.getRouter().getRoutes()
Run Code Online (Sandbox Code Playgroud)
有一个功能,getViews但我找不到相同的路线.
我坚持认为SAPUI5中是否可以使用概念,并且由于文档在这个详细程度上可能有点难以处理,我在研究路径中提出的问题比正常情况要早.主要是我不想花太多时间,如果有一个立即'否'的答案.
我有一个使用JSON模型的主视图的用例,但我必须生成自己的控件 - 我不能使用SplitApp等.
该模型实际上是一个2层深的树,主要导致细节.从概念上讲是这样的:
{
"master": [
{
"name": "Master 1",
"detail" : [
{
"name": "Detail 1-1"
},
{
"name": "Detail 1-2"
}
]
},
{
"name": "Master 2",
"detail" : [
{
"name": "Detail 2-1"
},
{
"name": "Detail 2-2"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
UX是一个可选择的主列表,当进行选择时,将刷新详细列表控件以显示所选主节点的子节点的详细信息.
我熟悉将模型绑定到视图
sap.ui.getCore().setModel(oModel)
this.getView().setModel(oModel)
Run Code Online (Sandbox Code Playgroud)
但是根据我迄今为止的学习情况,这会将视图中的所有控件绑定到一个模型.
我认为可能值得追求的选择是:
进一步解释2,如果说我正在使用表格进行详细显示,我可能会在表格def中使用
<Table
id="detailList"
items="{
path: '/'
}",
...
>
Run Code Online (Sandbox Code Playgroud)
所以我希望修改类似的路径
path: '/master[n]/detail/'
Run Code Online (Sandbox Code Playgroud)
其中n表示选定的主实例.
是可能的,还是有另一种选择,或者我应该放弃.
编辑:我在这里发现了Michael Herzog这种基于过滤器的潜在解决方案.他的描述是:
我将举例说明如何在SAPUI5中实现matser-detail关系.
使用案例:当用户点击第一个表中的客户端时,所有相关订单都应显示在第二个表中.应隐藏其他客户的订单.
因此,在我们看来,我们有两个表:
表:客户
表:订单 …
我在这里按照教程进行操作,并且遇到了参数路由问题.
示例应用程序没有在我的本地使用上运行,因此我将其更改为使用本地数据.但是,当我点击发票列表中的元素时,我收到错误"未捕获错误:无效值"发票/ 1"用于段"{invoicePath}"".它应该打开一个新的详细信息页面并显示产品名称和数量.
这是我的路由清单:
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "sap.ui.demo.wt.view",
"controlId": "app",
"controlAggregation": "pages"
},
"routes": [
{
"pattern": "",
"name": "overview",
"target": "overview"
},
{
"pattern": "detail/{invoicePath}",
"name": "detail",
"target": "detail"
}
],
"targets": {
"overview": {
"viewName": "Overview"
},
"detail": {
"viewName": "Detail"
}
}
}
Run Code Online (Sandbox Code Playgroud)
Invoices.json示例数据:
{
"Invoices": [
{
"ProductName": "Pineapple",
"Quantity": 21,
"ExtendedPrice": 87.2000,
"ShipperName": "Fun Inc.",
"ShippedDate": "2015-04-01T00:00:00",
"Status": "A"
}
]
}
Run Code Online (Sandbox Code Playgroud)
InvoiceList.controller.js.我填写发票列表并调用视图更改的位置.
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
"sap/ui/demo/wt/model/formatter", …Run Code Online (Sandbox Code Playgroud) 如果我在运行时创建一个视图及其控制器,我怎样才能将它连接到组件,而当我调用getOwnerComponent它时返回组件.
我找不到任何setOwnerComponent控制器或视图.
我面临以下问题。我有一个片段:
<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:layout="sap.ui.layout" >
<Dialog title="Hints" class="sapUiPopupWithPadding" contentWidth="60%">
<content>
<Table id="tblHintList" mode="SingleSelect" items="{HintList>/}" growing="true" growingThreshold="10" selectionChange="onGetSelectedHints">
</Table>
</content>
</Dialog>
</core:FragmentDefinition>
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我想通过 ID 访问表,如下所示:
var table = this.getView().byId("tblHintList");
this.getView().addDependent(Fragment)即使我打电话并且数据绑定正在工作,这也不起作用。
如何访问片段中定义的控件?
我正在玩OData服务,我很困惑何时使用它
var oModel = new sap.ui.model.odata.ODataModel("proxy/http/services.odata.org/V3/(S(k42qhed3hw4zgjxfnhivnmes))/OData/OData.svc");
this.getView().setModel(oModel);
Run Code Online (Sandbox Code Playgroud)
VS
var oModel = new sap.ui.model.odata.ODataModel("odatserviceurl", true);
var productsModel = new JSONModel();
oModel.read("/Products",
null,
null,
false,
function _OnSuccess(oData, response) {
var data = { "ProductCollection" : oData.results };
productsModel.setData(data);
},
function _OnError(error) {
console.log(error);
}
);
this.getView().setModel(productsModel);
Run Code Online (Sandbox Code Playgroud)
我有两个使用这两种方法的工作示例,但我无法弄清楚为什么使用read方法,如果我可以实现与第一个版本相同.请向我解释或指导可以解决我的困惑的文件.
我不知道为什么只有当按下按钮时才能运行的功能.
这是我的按钮声明:
var oButton = new sap.m.Button({
id: "buttonId",
text: "Yes",
press: this.fnB()
});
Run Code Online (Sandbox Code Playgroud)
我的控制器如下所示:
sap.ui.controller("<controller-name>", {
fnA: function(){<button_declaration_here>},
fnB: function(){console.log("Hello from fnB!");}
});
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,我得到:
你好fnB!
未捕获的TypeError:无法读取未定义的属性"0"
还没有按下按钮,为什么我会收到问候消息?
如果重要,我使用SAP WEB IDE ...
在SAP Fiori Launchpad配置期间,我们使用语义对象.什么是语义对象以及它在SAP FIORI中使用的原因?
感谢致敬,
Teja公司