sapui5 JS不具约束力
我试着使用OData服务创建搜索的帮助,但我的表显示控制器不确定的,这里是我的代码plz帮助sapui5 JS不具约束力
的index.html
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="UTF-8">
<title>search_help</title>
<script id="sap-ui-bootstrap"
src="../../resources/sap-ui-core.js"
data-sap-ui-libs="sap.m,sap.ui.commons,sap.ui.table,sap.ui.ux3"
data-sap-ui-theme="sap_belize"
data-sap-ui-compatVersion="edge"
data-sap-ui-resourceroots='{"search_help": ""}'>
</script>
<link rel="stylesheet" type="text/css" href="css/style.css">
<script>
sap.ui.getCore().attachInit(function() {
new sap.m.Shell({
app: new sap.ui.core.ComponentContainer({
height : "100%",
name : "search_help"
})
}).placeAt("content");
});
</script>
</head>
<body class="sapUiBody" id="content">
</body>
view1.view.js
sap.ui.jsview("search_help.view.View1", {
getControllerName: function() {
return "search_help.controller.View1";
},
createContent : function(oController) {
var oPanel = new sap.ui.commons.Panel({
text : "Select Order ID"
});
var oLayoutMatrix = new sap.ui.commons.layout.MatrixLayout({
width : "60%",
widths : [ "30%", "40%", "30%" ]
});
var oOrderLabel = new sap.ui.commons.Label("idOrderLabel",
{text: "Order ID"});
// Input Field for Material Number with Value Help
var oOrderInput = new sap.ui.commons.ValueHelpField("idOrderInput", {
valueHelpRequest: function(oEvent){
var oValueHelpDialog = new sap.ui.ux3.ToolPopup({
modal: true,
inverted: false,
title: "Select Order Number",
opener: "idOrderInput",
closed: function (oEvent){
}
});
var oOkButton = new sap.ui.commons.Button({
text: "OK",
press: function (oEvent) {
oEvent.getSource().getParent().close();
}
});
var oHelpTable = new sap.ui.table.Table("pTab1",{
selectionMode: sap.ui.table.SelectionMode.Single,
visibleRowCount: 7,
width: "300pt"
});
oHelpTable.addColumn(
new sap.ui.table.Column({
label: new sap.ui.commons.Label({text: "Maintenance Plane"}),
template: new sap.ui.commons.TextField().bindProperty("value", "Planplant"),
sortProperty: "Planplant",
filterProperty: "Planplant"
})
);
oHelpTable.addColumn(
new sap.ui.table.Column({
label: new sap.ui.commons.Label({text: "Order Number"}),
template: new sap.ui.commons.TextField().bindProperty("value", "Orderid"),
sortProperty: "Orderid",
filterProperty: "Orderid"
})
);
oHelpTable.addColumn(
new sap.ui.table.Column({
label: new sap.ui.commons.Label({text: "OrderType"}),
template: new sap.ui.commons.TextField().bindProperty("value", "OrderType"),
sortProperty: "OrderType",
filterProperty: "OrderType"
})
);
oValueHelpDialog.addContent(oHelpTable);
oValueHelpDialog.addButton(oOkButton);
oValueHelpDialog.open();
}
});
oLayoutMatrix.createRow(oOrderLabel, oOrderInput);
oPanel.addContent(oLayoutMatrix);
return oPanel;
}
});
个
view1.controller.js 这里otable是显示为未定义
sap.ui.define([
"sap/ui/core/mvc/Controller"], function(Controller) {
"use strict";
return Controller.extend("search_help.controller.View1", {
onInit: function()
{
var oModel = new sap.ui.model.odata.ODataModel("/Gateway_Order/sap/opu/odata/SAP/ZP01_FIORI_SRV_01/");
var oTable = this.byId("pTab1");
oTable.setModel(oModel);
oTable.bindRows("/OrderDataSet");
}
});
});
你的问题是你如何获取你的表的ID。
解决问题的方法是:
var oTable = sap.ui.getCore().byId("pTab1");
然而,让我们明白的ID创建和获取。
-
在JS浏览,有两种方法来创建标识。
方法1::提供直接标识。例如:
VAR oText =新sap.m.Text( 'idText'{文字: '嘿!'});
现在,这个id -'idText'与您的整个应用程序相关联。所以,如果你有另一个视图,它有一个相同的ID控制,你会在控制台中看到重复的ID错误。
要使用IDS与WAY1创建获取控件,使用下面的方法:
var oControl = sap.ui.getCore().byId('idText'); // since this is unique everywhere in your application.
现在,让我们想到2名或更多的开发人员在应用程序中工作,他们正在为应用程序创建不同的看法。他们可能(有很高的可能性),用相同的ID创建控件。由于重复的id错误,我们在整合两个视图时应用程序会崩溃。如何解决这个问题?
路2:我们可以使用的方法createId控制器()创建一个ID为与视图的ID前缀。因此,即使两个开发人员使用相同的ID,这种方式也会由于不同的视图ID而以不同的ID进行控制。因此,让我们认为我们有两个视图View1(id:view1)和view2(id:view2)。
如果我创建(使用createId控制器()方法),同时在控制与相同ID的控制,将产生两个独特的ID和重复ID错误永远不会加薪。
所以,视图1(ID:厂景):
var oText = new sap.m.Text(oController.createId('idText'),{ text:'Hey!'});
在图1 oText的编号:厂景 - idText
同样,
视图2(ID:视图2):
var oText = new sap.m.Text(oController.createId('idText'),{ text:'Hey!'});
鉴于2 oText的编号:视图2 - idText
很好完成。但是,如果视图ID是自动生成的,我可能不知道我的视图ID是什么?好问题。
解决方案是方法:this.byId()。在这种情况下,如果控件的id以视图的ID为前缀,则始终使用方法this.byId()。它会为您添加视图的ID,然后搜索并返回该视图唯一的控件。因此,要获取View1的oText,您将使用(在View1的控制器中);
var oText = this.byId('idText')// will fetch view1--idText
再次获取View2的oText,您将使用(在View2的控制器中);
var oText = this.byId('idText')// will fetch view2--idText
- IN XML视图,控件标识总是与视图的由框架ID自动前缀。这与我们的JS 2路相似。 (JS的方法1在XML视图中永远不可能)。
查看代码:
<Text id='idText' text='hey! /> <!-- Id generated is: 'viewid--idText' -->
因此,当您使用XML看法,ID的获取一直秉乘:
var oControl = this.byId('idText');
我得到的输出列表从OData服务到valuehelprequest表,但无法过滤数据。
sap.ui.define([
"sap/ui/core/mvc/Controller
], function(Controller) {
"use strict";
return Controller.extend("Xml_Search.controller.View1", {
handlef4: function(){
var oInput= this.getView().byId("Orderid");
if(!this._oValueHelpDialog){
this._oValueHelpDialog= new sap.ui.comp.valuehelpdialog.ValueHelpDialog("idValueHelp",{
// supportRanges: true,
key: "Orderid",
descriptionKey: "OrderType",
ok: function(oEvent){
var aTokens= oEvent.getParameter("tokens");
oInput.setTokens(aTokens);
this.close();
},
cancel: function(){
this.close();
}
});
}
var oColModel = new sap.ui.model.json.JSONModel();
oColModel.setData({
cols: [
{label: "Orderid", template: "Orderid"},
{label: "OrderType", template: "OrderType"},
{label: "Planplant", template: "Planplant"}
]
});
var oTable = this._oValueHelpDialog.getTable();
oTable.setModel(oColModel,"columns");
var oModel = new sap.ui.model.odata.ODataModel("/Gateway_Order/sap/opu/odata/SAP/ZP01_FIORI_SRV_01/");
oTable.setModel(oModel);
oTable.bindRows({path: "/OrderDataSet", filters: [new
sap.ui.model.Filter("Orderid",sap.ui.model.FilterOperator.EQ,null, oInput)]}
);
this._oValueHelpDialog.open();
}
});
});
这可能会有所帮助:http://*.com/questions/27021011 – ppovoski