带块的对象页面

时间:2017-01-26 07:56:49

标签: sapui5

我有这个ObjectPageLayout:

request.view.xml

    <ObjectPageLayout>
        <headerTitle>
            ...
        </headerTitle>
        <headerContent>
            ...
        </headerContent>

        <sections>
            <ObjectPageSection
                mode="Collapsed">
                <subSections>
                    <ObjectPageSubSection title="fooBlock">
                        <blocks>
                            <blockdetail:FormBlock columnLayout="auto" /> <!-- MY BLOCK -->
                        </blocks>
                    </ObjectPageSubSection>
                </subSections>
            </ObjectPageSection>
        </sections>
    </ObjectPageLayout>

FormBlockCollapsed.view.xml (我的阻止)

<mvc:View xmlns:f="sap.ui.layout.form" xmlns:mvc="sap.ui.core.mvc"
    xmlns:core="sap.ui.core" xmlns:l="sap.ui.layout" xmlns="sap.m"
    controllerName="NAMESPACE.blocks.DetailsBlockCommon">
    <FlexBox>
        <HBox>
            <VBox>
                <f:SimpleForm >
                    <f:content>
                        <CheckBox class="sapUiSmallMarginBegin sapUiSmallMarginTop" id="myCheckbox" />
                    </f:content>
                </f:SimpleForm>
            </VBox>
        </HBox>
    </FlexBox>
...
</mvc:View>

到目前为止,一切都很好。我的对象页面看起来很好,显示了复选框。

在我的Controller request.controller.js 中,我想验证FormBlockCollapsed.view.xml中的复选框

validateBlockForm: function(format){
    console.log( oView.byId("myCheckbox").checked() ); //oView.byId("myCheckbox") is undefined
}

但我无法访问该块中的复选框。

  

无法阅读财产&#39;已检查&#39;未定义的

更多信息

FormBlock.js

sap.ui.define(['sap/uxap/BlockBase'], function (BlockBase) {
    "use strict";

    var MultiViewBlock = BlockBase.extend("NAMESPACE.blocks.FormBlock", {
        metadata: {
            views: {
                Collapsed: {
                    viewName: "NAMESPACE.blocks.FormBlockCollapsed",
                    type: "XML"
                }
            }
        }
    });

    return MultiViewBlock;
}, true);

DetailBlockCommon.js

sap.ui.define([
    "NAMESPACE/controller/BaseController"
], function (BaseController) {
    "use strict";

    return BaseController.extend("NAMESPACE.blocks.DetailsBlockCommon", {


    });
});

3 个答案:

答案 0 :(得分:0)

  

嗨@alexP你现在可能已经解决了这个问题,但对于所有那些现在正在+ n的人来说,这是我对它的想法......

     

主视图和块将具有不同的命名空间,因此当您查找时   oView.byId("myCheckbox").checked()您正在视图中寻找它。

     

我建议给你的块一个id id="myBlock",然后在你的主控制器中用byId获取一个句柄。

     

本质上:

     

oBlock = oView.byId("myBlock");      oCheckbox = oBlock.byId("myCheckbox");

     

或者如果你想在一行中做到这一点。

     

oCheckbox = oView.byId("myBlock").byId("myCheckbox");

     

这将导航id命名空间,你应该在路上。

其实我已经对此进行了审核,但这是不正确的。向右移动

答案 1 :(得分:0)

您可以通过块的 id 和元素的 id 来访问部分中的元素。

首先我们必须在xml视图中为块定义一个id:

<blocks>
        <blockdetail:FormBlock id="formBlock" columnLayout="auto" /> <!-- MY BLOCK -->
</blocks>

然后我们在视图控制器中生成如下元素的id。这里的最新技术是添加 -Collapsed-- 作为 SAPUI5 添加到部分元素的 id 的一部分。

var sFieldId = this.getView().createId("formBlock") + 
                                       "-Collapsed--myCheckbox";
var oCheckbox = sap.ui.getCore().byId(sFieldId);

答案 2 :(得分:-3)

检查oView是否已定义。

你可以通过this.getView()

轻松搞定