我有这个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", {
});
});
答案 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()
轻松搞定