SAPUI5 sap.m.Input-建议值

SAPUI5 sap.m.Input-建议值,input,odata,sapui5,search-suggestion,Input,Odata,Sapui5,Search Suggestion,如何通过从odata服务读取表中的单个单元格来启用实时建议 oTable.addColumn(new sap.ui.table.Column({ template : new sap.m.Input({ value : column, // also works, its dynamic textAlign : sap.ui.core.TextAlign.Center,

如何通过从odata服务读取表中的单个单元格来启用实时建议

oTable.addColumn(new sap.ui.table.Column({
                template : new sap.m.Input({
                    value : column, // also works, its dynamic
                    textAlign : sap.ui.core.TextAlign.Center,
                    inputType : Text,
                    type : sap.m.InputType.Text,
                    showSuggestion : true,
                    liveChange : function() {
                        if (this.getValue().length > 0) {
                            var oModel = new sap.ui.model.json.JSONModel();
                            var value = this.getValue();
                            var serviceUrl = "/sap/opu/odata/SAP/XXXX_SRV/SuggestionsSet/?$filter=startswith(Key,'" + value + "')";
                            oModel.loadData(serviceUrl, null, false, "GET", false, false, null);

                            this.destroySuggestionItems();
                            for (var i = 0; i < oModel.oData.d.results.length; i++) {
                                this.addSuggestionItem(new sap.ui.core.Item({
                                    text: oModel.oData.d.results[i].Key,
                                }));
                            } // everything seems fine, but no Suggestion opens..


                        }
                    },
                }),
                visible : true,
            }));
oTable.addColumn(新的sap.ui.table.Column({
模板:新sap.m.Input({
value:column,//也可以工作,其动态
textAlign:sap.ui.core.textAlign.Center,
输入类型:文本,
类型:sap.m.InputType.Text,
建议:没错,
liveChange:function(){
if(this.getValue().length>0){
var oModel=new sap.ui.model.json.JSONModel();
var value=this.getValue();
var serviceUrl=“/sap/opu/odata/sap/XXXX_SRV/suggestionset/?$filter=startswith(键“+value+”)”;
loadData(serviceUrl,null,false,“GET”,false,false,null);
这是.destroySuggestionItems();
对于(var i=0;i
请参阅。 然而,在您的案例中,模型是ODataModel,但这并不重要。。。 正如您在示例代码中看到的,您也可以使用

showSuggestion="true"
suggest="handleSuggest"
suggestionItems="{/ProductCollection}"
然后在处理程序中执行此操作(也从示例中复制):

基本上是你 -创建一个或多个筛选器 -获取suggestionItems聚合的绑定 -调用绑定上的.filter(…),并通过筛选器

不需要手动编写代码(例如获取请求等)

下面是一个runninh示例(),请参见下文。 在你的情况下,你所做的就是约束自己

suggestionItems="{path:'/SuggestionSet', templateShareable:false}">
然后,在handleSuggest处理程序中,您将获得属于当前/相应输入字段的SuggestionSet键属性的值,以便实例化一个新过滤器。我想您可以从BindingContext获取

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>SAPUI5 single file template | nabisoft</title>
        <script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
            id="sap-ui-bootstrap"
            data-sap-ui-theme="sap_bluecrystal"
            data-sap-ui-libs="sap.m"
            data-sap-ui-bindingSyntax="complex"
            data-sap-ui-compatVersion="edge"
            data-sap-ui-preload="async"></script>
            <!-- use "sync" or change the code below if you have issues -->

            <!-- XMLView -->
            <script id="myXmlView" type="ui5/xmlview">
                <mvc:View
                    controllerName="MyController"
                    xmlns="sap.m"
                    xmlns:core="sap.ui.core"
                    xmlns:mvc="sap.ui.core.mvc">

                    <Table
                        id="myTable"
                        growing="true"
                        growingThreshold="10"
                        growingScrollToLoad="true"
                        busyIndicatorDelay="0">
                        <columns>
                            <Column>
                                <Text text="Customer ID"/>
                            </Column>
                            <Column>
                                <Text text="Company Name"/>
                            </Column>
                        </columns>
                        <items>
                            <!-- filled via bindItems() in controller -->
                        </items>
                    </Table>

                </mvc:View>
            </script>

            <!-- XML Fragment -->
            <script id="myXMLFragment" type="ui5/fragment">
                <core:FragmentDefinition
                    xmlns="sap.m"
                    xmlns:core="sap.ui.core">
                    <ColumnListItem type="Active">
                        <cells>
                            <ObjectIdentifier title="{CustomerID}"/>

                            <Input
                                value="{CompanyName}"
                                showSuggestion="true"
                                suggest="handleSuggest"
                                suggestionItems="{path:'/Customers', templateShareable:false}">
                                <suggestionItems>
                                    <core:Item text="{CompanyName}" />
                                </suggestionItems>
                            </Input>

                        </cells>
                    </ColumnListItem>
                </core:FragmentDefinition>
            </script>


        <script>
            sap.ui.getCore().attachInit(function () {
                "use strict";

                //### Controller ###
                sap.ui.controller("MyController", {
                    onInit : function () {

                        this.getView().setModel(
                            new sap.ui.model.odata.v2.ODataModel("https://cors-anywhere.herokuapp.com/services.odata.org/V2/Northwind/Northwind.svc/", {
                                json : true,
                                useBatch : false
                            })
                        );

                        var sPath = "/Customers";
                        var oTable = this.byId("myTable");
                        var oTemplate =  sap.ui.xmlfragment({
                            fragmentContent : jQuery("#myXMLFragment").html()
                        });

                        oTable.bindItems(sPath, oTemplate, null /*oSorter*/, null /*aFilters*/);
                    },
                    handleSuggest: function(oEvent) {
                        var sTerm = oEvent.getParameter("suggestValue");
                        var aFilters = [];
                        if (sTerm) {
                            aFilters.push(new Filter("CompanyName", sap.ui.model.FilterOperator.StartsWith, sTerm));
                        }
                        oEvent.getSource().getBinding("suggestionItems").filter(aFilters);
                    }
                });

                //### THE APP: place the XMLView somewhere into DOM ###
                sap.ui.xmlview({
                    viewContent : jQuery("#myXmlView").html()
                }).placeAt("content");

            });
        </script>

    </head>

    <body class="sapUiBody">
        <div id="content"></div>
    </body>
</html>

SAPUI5单文件模板| nabisoft
sap.ui.getCore().attachInit(函数(){
“严格使用”;
//###控制器###
sap.ui.controller(“MyController”{
onInit:function(){
这是.getView().setModel(
新的sap.ui.model.odata.v2.ODataModel(“https://cors-anywhere.herokuapp.com/services.odata.org/V2/Northwind/Northwind.svc/", {
是的,
useBatch:false
})
);
var sPath=“/Customers”;
var oTable=this.byId(“myTable”);
var-oTemplate=sap.ui.xmlfragment({
fragmentContent:jQuery(“#myXMLFragment”).html()
});
oTable.bindItems(sPath、oTemplate、null/*oSorter*/、null/*aFilters*/);
},
手柄建议:功能(oEvent){
var sTerm=oEvent.getParameter(“suggestValue”);
var aFilters=[];
如果(斯特姆){
推送(新过滤器(“CompanyName”,sap.ui.model.FilterOperator.StartsWith,sTerm));
}
oEvent.getSource().getBinding(“suggestionItems”).filter(过滤器);
}
});
//###应用程序:将XMLView放在DOM中的某个位置###
sap.ui.xmlview({
viewContent:jQuery(“#myXmlView”).html()
}).placeAt(“内容”);
});
请参阅。 然而,在您的案例中,模型是ODataModel,但这并不重要。。。 正如您在示例代码中看到的,您也可以使用

showSuggestion="true"
suggest="handleSuggest"
suggestionItems="{/ProductCollection}"
然后在处理程序中执行此操作(也从示例中复制):

基本上是你 -创建一个或多个筛选器 -获取suggestionItems聚合的绑定 -调用绑定上的.filter(…),并通过筛选器

不需要手动编写代码(例如获取请求等)

下面是一个runninh示例(),请参见下文。 在你的情况下,你所做的就是约束自己

suggestionItems="{path:'/SuggestionSet', templateShareable:false}">
然后,在handleSuggest处理程序中,您将获得属于当前/相应输入字段的SuggestionSet键属性的值,以便实例化一个新过滤器。我想您可以从BindingContext获取

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>SAPUI5 single file template | nabisoft</title>
        <script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
            id="sap-ui-bootstrap"
            data-sap-ui-theme="sap_bluecrystal"
            data-sap-ui-libs="sap.m"
            data-sap-ui-bindingSyntax="complex"
            data-sap-ui-compatVersion="edge"
            data-sap-ui-preload="async"></script>
            <!-- use "sync" or change the code below if you have issues -->

            <!-- XMLView -->
            <script id="myXmlView" type="ui5/xmlview">
                <mvc:View
                    controllerName="MyController"
                    xmlns="sap.m"
                    xmlns:core="sap.ui.core"
                    xmlns:mvc="sap.ui.core.mvc">

                    <Table
                        id="myTable"
                        growing="true"
                        growingThreshold="10"
                        growingScrollToLoad="true"
                        busyIndicatorDelay="0">
                        <columns>
                            <Column>
                                <Text text="Customer ID"/>
                            </Column>
                            <Column>
                                <Text text="Company Name"/>
                            </Column>
                        </columns>
                        <items>
                            <!-- filled via bindItems() in controller -->
                        </items>
                    </Table>

                </mvc:View>
            </script>

            <!-- XML Fragment -->
            <script id="myXMLFragment" type="ui5/fragment">
                <core:FragmentDefinition
                    xmlns="sap.m"
                    xmlns:core="sap.ui.core">
                    <ColumnListItem type="Active">
                        <cells>
                            <ObjectIdentifier title="{CustomerID}"/>

                            <Input
                                value="{CompanyName}"
                                showSuggestion="true"
                                suggest="handleSuggest"
                                suggestionItems="{path:'/Customers', templateShareable:false}">
                                <suggestionItems>
                                    <core:Item text="{CompanyName}" />
                                </suggestionItems>
                            </Input>

                        </cells>
                    </ColumnListItem>
                </core:FragmentDefinition>
            </script>


        <script>
            sap.ui.getCore().attachInit(function () {
                "use strict";

                //### Controller ###
                sap.ui.controller("MyController", {
                    onInit : function () {

                        this.getView().setModel(
                            new sap.ui.model.odata.v2.ODataModel("https://cors-anywhere.herokuapp.com/services.odata.org/V2/Northwind/Northwind.svc/", {
                                json : true,
                                useBatch : false
                            })
                        );

                        var sPath = "/Customers";
                        var oTable = this.byId("myTable");
                        var oTemplate =  sap.ui.xmlfragment({
                            fragmentContent : jQuery("#myXMLFragment").html()
                        });

                        oTable.bindItems(sPath, oTemplate, null /*oSorter*/, null /*aFilters*/);
                    },
                    handleSuggest: function(oEvent) {
                        var sTerm = oEvent.getParameter("suggestValue");
                        var aFilters = [];
                        if (sTerm) {
                            aFilters.push(new Filter("CompanyName", sap.ui.model.FilterOperator.StartsWith, sTerm));
                        }
                        oEvent.getSource().getBinding("suggestionItems").filter(aFilters);
                    }
                });

                //### THE APP: place the XMLView somewhere into DOM ###
                sap.ui.xmlview({
                    viewContent : jQuery("#myXmlView").html()
                }).placeAt("content");

            });
        </script>

    </head>

    <body class="sapUiBody">
        <div id="content"></div>
    </body>
</html>

SAPUI5单文件模板| nabisoft