首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从byId片段中获取控件SAPUI5

如何从byId片段中获取控件SAPUI5
EN

Stack Overflow用户
提问于 2017-11-16 07:28:23
回答 3查看 11.2K关注 0票数 1

我有一个对话框,在一个片段中。因此,在输入详细信息并单击submit按钮后,填充到输入中的文本应该显示为MessageToast。但我得到了一个错误:“无法读取属性'getValue‘的未定义’。

以下是代码:

代码语言:javascript
运行
复制
    onAddMovie: function() {
        var view = this.getView();
        var createDialog = view.byId("CreateDialog");
        var oDummyController = {
            // This is when I clicked the Submit button in dialog
            submitDialog: function() {
            var user = sap.ui.core.Fragment.byId("createDialog", "movie_name").getValue();
                MessageToast.show(user);
                createDialog.close();
            },
            closeDialog: function() {
                createDialog.close();
            }
        };

        if (!createDialog) {
            createDialog = sap.ui.xmlfragment(view.getId(), "Admin.view.Dialog", oDummyController);
        }
        view.addDependent(createDialog);
        createDialog.open();
        if (!createDialog.isOpen()) {
            //do sth
        }
    },

上面是显示对话框的函数,按下submit按钮后,输入中的文本应该显示在MessageToast中。

XML:

代码语言:javascript
运行
复制
        <core:FragmentDefinition  xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:l="sap.ui.layout">

        <Dialog id="createDialog" title="Input Movie Details" width="100%" class="sapuiMediumMargin" confirm="handleClose" close="handleClose">
            <l:VerticalLayout class="sapUiContentPadding" width="100%">
            <l:content>
                <Input width="100%" placeholder="Movie Name" id="movie_name"/>
                <HBox alignItems="Center" renderType="Bare">
                    <Label text="Year of Release" width="50%"/>
                    <ActionSelect selectedItem="Element sap.ui.core.ListItem#__item0" selectedKey="item1" class="sapUiLargeMarginBegin" selectedItemId="__item0" id="__select0" width="50%">
                        <items>
                            <core:ListItem text="2017" key="item1" id="__item0"/>
                            <core:ListItem text="2016" key="item2" id="__item1"/>
                            <core:ListItem text="2015" key="item3" id="__item2"/></items>
                    </ActionSelect>
                </HBox>
                <HBox alignItems="Center" renderType="Bare">
                    <Label text="Date of Screening" width="50%"/>
                    <DatePicker class="sapUiLargeMarginBegin" width="50%" id="__picker0"/>
                </HBox>
                <HBox alignItems="Center">
                    <Label text="Movie Rating"/>
                    <RadioButtonGroup width="100%" columns="3" selectedIndex="-1" id="__group0">
                        <buttons>
                            <RadioButton selected="true" groupName="__group0" text="Universal" id="__button0"/>
                            <RadioButton groupName="__group0" text="Adult" id="__button1"/>
                            <RadioButton groupName="__group0" text="U/A" id="__button2"/></buttons>
                    </RadioButtonGroup>
                </HBox>
                        <HBox alignItems="Center" width="100%" renderType="Bare">
                    <Label text="Enable Booking" width="70%"/>
                <CheckBox id="__box0" width="30%" textDirection="LTR"/>
            </HBox>
                <FlexBox alignItems="End" alignContent="Center" justifyContent="End" class="sapUiTinyMarginTop">


                    <SegmentedButton selectedButton="__button3" id="__button21">
                            <buttons>
                                <Button text="Submit" id="__submit" press="submitDialog"/>
                                <Button text="Cancel" id="__button41" press="closeDialog"/></buttons>
                        </SegmentedButton>
                            </FlexBox>
                </l:content>
            </l:VerticalLayout>
        </Dialog>

    </core:FragmentDefinition>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-16 09:57:24

因为您正在使用视图id创建对话框。

代码语言:javascript
运行
复制
sap.ui.xmlfragment(view.getId(), "Admin.view.Dialog", oDummyController);

该片段中的所有控件id都将以视图id (this.getView().getId(),例如__xmlview1)作为前缀。

这有一个巨大的优势,即所有片段控件都可以通过this.getView().getId()访问,因此真正“感觉”它们是视图的一部分,并且可以作为视图来处理(尤其是这样的)。当使用片段构造视图代码时很有用)。

这就是为什么你需要用

代码语言:javascript
运行
复制
this.getView().byId("movie_name");

它将最终使用像__xmlview1--movie_name这样的id来查询控件(--被SAPUI5用作分隔符)。

- byId方法的一般行为

一般来说,byId方法的行为如下:

代码语言:javascript
运行
复制
this.getView().byId(sId) === sap.ui.getCore().byId(sViewId + '--' + sId));
sViewId + '--' + sId === this.getView().createId(sId)
sap.ui.core.Fragment.byId(sFragmentId, sId) === sap.ui.getCore().byId(sFragmentId + '--' + sId));

提示

注意视图的控件和片段之间的潜在ID冲突!

票数 2
EN

Stack Overflow用户

发布于 2017-11-16 08:30:40

片段

代码语言:javascript
运行
复制
<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:l="sap.ui.layout">
<Dialog id="createDialog" title="Input Movie Details" width="100%" class="sapuiMediumMargin" confirm="handleClose" close="handleClose">
    <l:VerticalLayout class="sapUiContentPadding" width="100%">
        <l:content>
            <Input width="100%" placeholder="Movie Name" id="movie_name"/>
            <HBox alignItems="Center" renderType="Bare">
                <Label text="Year of Release" width="50%"/>
                <ActionSelect selectedKey="item1" class="sapUiLargeMarginBegin" id="select0" width="50%">
                    <items>
                        <core:ListItem text="2017" key="item1" id="item0"/>
                        <core:ListItem text="2016" key="item2" id="item1"/>
                        <core:ListItem text="2015" key="item3" id="item2"/></items>
                </ActionSelect>
            </HBox>
            <HBox alignItems="Center" renderType="Bare">
                <Label text="Date of Screening" width="50%"/>
                <DatePicker class="sapUiLargeMarginBegin" width="50%" id="picker0"/>
            </HBox>
            <HBox alignItems="Center">
                <Label text="Movie Rating"/>
                <RadioButtonGroup width="100%" columns="3" selectedIndex="-1" id="group0">
                    <buttons>
                        <RadioButton selected="true" groupName="group0" text="Universal" id="button0"/>
                        <RadioButton groupName="group0" text="Adult" id="button1"/>
                        <RadioButton groupName="group0" text="U/A" id="button2"/></buttons>
                </RadioButtonGroup>
            </HBox>
            <HBox alignItems="Center" width="100%" renderType="Bare">
                <Label text="Enable Booking" width="70%"/>
                <CheckBox id="box0" width="30%" textDirection="LTR"/>
            </HBox>
            <FlexBox alignItems="End" alignContent="Center" justifyContent="End" class="sapUiTinyMarginTop">
                <SegmentedButton id="button21">
                    <buttons>
                        <Button text="Submit" id="submit" press="submitDialog"/>
                        <Button text="Cancel" id="button41" press="closeDialog"/></buttons>
                </SegmentedButton>
            </FlexBox>
        </l:content>
    </l:VerticalLayout>
</Dialog>

代码语言:javascript
运行
复制
Controller
sap.ui.define([
    "sap/ui/core/mvc/Controller"
], function(Controller) {
    "use strict";
return Controller.extend("test001test001.controller.View1", {
    _oNewProcessDialog:null,
    onAddMovie: function() {
    this._getNewProcessDialog().open();
    },
    submitDialog:function(){

    sap.m.MessageToast.show(sap.ui.getCore().byId("movie_name").getValue());
    },
    closeDialog: function() {
            this._getNewProcessDialog().close();
        },

        _getNewProcessDialog: function() {
        // create dialog lazily
        if (!this._oNewProcessDialog) {
            // create dialog via fragment factory
            this._oNewProcessDialog = sap.ui.xmlfragment("test001test001.view.CreateDialog", this);
            // connect dialog to view (models, lifecycle)
            this.getView().addDependent(this._oNewProcessDialog);
            jQuery.sap.syncStyleClass("sapUiSizeCompact", this.getView(), this._oNewProcessDialog);
        }
        return this._oNewProcessDialog;
    },
});

});

维维

代码语言:javascript
运行
复制
<Button press="onAddMovie"></Button>
票数 1
EN

Stack Overflow用户

发布于 2017-11-16 09:36:20

而不是使用:

代码语言:javascript
运行
复制
 var view = this.getView();
var user = sap.ui.core.Fragment.byId("createDialog", "movie_name").getValue();

我用:

代码语言:javascript
运行
复制
 var view = this.getView();
 var user = view.byId("movie_name").getValue();
                MessageToast.show(user);

成功了!!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47323907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档