我正在用sapui5开发一个map应用程序,它需要使用地图。这是我的场景:
我有一个名叫view1的视图,这是我的主要作品。在该视图中,我有一个输入字段(Input1)和一个图标选项卡,有4个不同的选项卡。
默认选项卡是第一个选项卡,我需要它作为一个要求。现在,incontabbar的第二个选项卡对应于映射。Input1字段,是对应于映射的自动完成字段的字段。
在这里,有趣的是,在指向制表符的选项卡中,我有子视图,它有自己的控制器和视图文件(xml视图)。
View1代码:(用完整的view1更新)
<mvc:View controllerName="WDC.controller.View1"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc"
xmlns:f="sap.ui.layout.form"
displayBlock="true"
xmlns="sap.m">
<App>
<pages>
<Page title="{i18n>title}">
<f:SimpleForm id="SimpleFormToolbar">
<f:content >
<Label class="labels" width="50%" id="label" text="Address" labelFor="input1"/>
<Input class="myInput" id="input1" width="50%" fieldWidth="100%" showSuggestion="true"/>
</f:content>
</f:SimpleForm>
<IconTabBar>
<items>
<IconTabFilter icon="sap-icon://employee" text="Data" id="iconTabBarData">
<mvc:XMLView viewName="WDC.view.view3"/>
</IconTabFilter>
<IconTabFilter icon="sap-icon://map" text="Map" id="mapTab" visible="true">
<mvc:XMLView viewName="WDC.view.View2"/> // THIS VIEW IS NOT CREATED UNTIL I CLICK ON ITS TABICON
</IconTabFilter>
</items>
</IconTabBar>
</Page>
</pages>
</App>
</mvc:View>
我需要做的是,当用户从input1字段从view1搜索某些内容时,自动调用带有地图的第二个选项卡,并在子视图中显示用户搜索的地址(让我们称之为view2)。问题是,我不能将input1指定为tab2中映射的自动完成,因为该视图是在我按下表过滤器图标后才创建的。
我认为我唯一的机会是在view1中创建一个带有映射的隐藏div,将input1分配给它,当用户搜索某个东西时,将地图从view1“移动”到view2上的div。但我不知道如何做到这一点。
我尝试在view1中为div创建一个带有htmlcode的隐藏组件,但是如果我将visible=设置为“false”,则html代码不会显示,所以我无法创建映射。如果我让组件可见,映射就会出现在view1上并运行良好,但我不知道如何将它“移动”到另一个尚未创建的视图。
如果需要,我可以使用来自view1控制器的getter函数从onInit FUnction on view2中的view1获取映射,但我仍然需要知道如何做这三件事:
希望我说得够清楚,这让我快疯了!
发布于 2017-06-23 20:17:10
如果我正确地理解了你,你的问题是:“如何在不同的孤立观点之间建立联系?”
由于您在XML中以声明方式将view2包含到view1中,这意味着将在同一个组件的作用域中创建内部视图(和相应的控制器),这意味着将在它们之间共享所有者组件。这一声明为我们提供了以下机会:
由于view1和view2的控制器共享相同的组件:"this.getOwnerComponent()",您可以通过事件在两个视图(对应的控制器)之间建立连接,这些事件将在共享组件对象上触发:
View1.控制器(JS):
onSuggestSelected: function () {
---------
var oComponent = this.getOwnerComponent();
oComponent.fireEvent("view1:suggestValue", {foo: "bar"});
}
View2.控制器(JS):
onInit: function () {
var oComponent = this.getOwnerComponent();
oComponent.attachEvent("view1:suggestValue", function (oParams) {
var sSuggestValueFromView1 = oParams.foo;
// do some logic here
});
}
通过这种方式,您可以在激活/呈现/任何情况下从view2向view1发送消息,而view1可以告诉view2E 223
使用某个参数进行搜索。
https://stackoverflow.com/questions/44724958
复制相似问题