Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从SAPUI5片段获取控件byId_Javascript_Xml_Dialog_Sapui5 - Fatal编程技术网

Javascript 如何从SAPUI5片段获取控件byId

Javascript 如何从SAPUI5片段获取控件byId,javascript,xml,dialog,sapui5,Javascript,Xml,Dialog,Sapui5,我有一个片段中的对话。因此,在输入详细信息并单击submit按钮后,输入中填写的文本应显示为MessageToast。但是我得到了一个错误:“无法读取未定义的”的属性“getValue” 代码如下: onAddMovie: function() { var view = this.getView(); var createDialog = view.byId("CreateDialog"); var oDummyController = {

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

代码如下:

    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:

        <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>

片段

<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>
}))

威斯


片段

<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>
}))

威斯


而不是使用:

 var view = this.getView();
var user = sap.ui.core.Fragment.byId("createDialog", "movie_name").getValue();
我用过:

 var view = this.getView();
 var user = view.byId("movie_name").getValue();
                MessageToast.show(user);
成功了

而不是使用:

 var view = this.getView();
var user = sap.ui.core.Fragment.byId("createDialog", "movie_name").getValue();
我用过:

 var view = this.getView();
 var user = view.byId("movie_name").getValue();
                MessageToast.show(user);

成功了

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

sap.ui.xmlfragment(view.getId(), "Admin.view.Dialog", oDummyController);
该片段中的所有控件id都将以视图id作为前缀(
this.getView().getId()
,例如
\uxmlview1

这有一个很大的优势,即所有片段控件都可以通过
this.getView().getId()
访问,因此确实“感觉”它们是视图的一部分,并且可以被视为视图的一部分(特别是在使用片段构造视图代码时非常有用)

这就是为什么你需要使用

this.getView().byId("movie_name");
它将查询id为
\uu xmlview1--movie\u name
(SAPUI5将
--
用作分隔符)的控件

byId方法的一般行为

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

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冲突

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

sap.ui.xmlfragment(view.getId(), "Admin.view.Dialog", oDummyController);
该片段中的所有控件id都将以视图id作为前缀(
this.getView().getId()
,例如
\uxmlview1

这有一个很大的优势,即所有片段控件都可以通过
this.getView().getId()
访问,因此确实“感觉”它们是视图的一部分,并且可以被视为视图的一部分(特别是在使用片段构造视图代码时非常有用)

这就是为什么你需要使用

this.getView().byId("movie_name");
它将查询id为
\uu xmlview1--movie\u name
(SAPUI5将
--
用作分隔符)的控件

byId方法的一般行为

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

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冲突

从片段中获取控件取决于您创建片段的方式:在本例中,调用
this.byId(“movie\u name”)
返回控件。从片段中获取控件取决于您创建片段的方式:在本例中,调用
this.byId(“movie\u name”)
返回控件。