【问题标题】:Calling cross controller function调用交叉控制器函数
【发布时间】:2016-03-26 20:25:09
【问题描述】:

我有两对控制器和视图。第一个视图包含项目列表,而第二个视图显示特定项目的一些详细信息。我想要实现的是单击一个列表项,函数 onSelect 应该调用详细视图的第二个控制器并使用所选列表项更新其内容。

到目前为止,我有以下代码:

//first list controller
onSelect : function () {
var secondController = sap.ui.controller("controller.Detail");
secondController.updateFunction("some text");
}

然后在第二个控制器中:

//second detail-controller
updateFunction: function (someText) {
var view = sap.ui.xmlview("view.Detail");
view.byId("someTextField").setText(someText);
}

问题是这不起作用。似乎 sap.ui.xmlview 没有返回显示的相同视图。 当我执行以下代码时:

var model = view.getModel(model);
console.log(model);

明细控制器的2个函数内,但第一个被外部控制器调用,第二个被onInit调用或被明细视图事件调用的函数,id不同。

如何通过更新不同视图的内容来实现这样的跨控制器函数调用?还是我的做法不对?

【问题讨论】:

    标签: function view controller sapui5


    【解决方案1】:

    我建议使用EventBusRouting 进行面试交流。

    路由 很好,因为它使用 URL 的 hash part (#) 来传达例如选择项目之类的事件(例如 https://example.com/myUi5App/index.html#/item/123)。用户可以使用浏览器历史记录和书签来浏览您的应用程序。 视图可以注册到路由器,以便在匹配特定 url 模式时得到通知。 SAPUI5 开发人员指南中的演练很好地逐步详细解释了路由herehere

    EventBus 是一个可以发布任意事件的全局对象。任何有兴趣的人都可以注册到 EventBus。 Component 上有一个 EventBus,如果你有一个组件和一个 global EventBus,你应该使用它。

    这两种技术都有助于分离您的观点。是否有一个、多个或没有监听选择更改的视图都没有关系。对于触发事件的听众来说,这并不重要。

    【讨论】:

      【解决方案2】:

      如果两个视图都被调用一次,你可以通过视图实现这一点(从我的观点来看,这很 hacky,应该以其他方式解决)

      this.getView().byId("yourViewId").oController.yourMethod();
      

      在你的情况下是指

      onSelect : function () {
        var secondController = this.getView().byId("view_id").oController;
        secondController.updateFunction("some text");
      }
      

      也许这对你有帮助,他正在传递控制器引用,这将是一个更好的选择:Calling Controller Function from inside a press handler in sapui5

      【讨论】:

        【解决方案3】:

        我找到了解决办法。

        sap.ui.getCore().byId("__xmlview1");
        

        根据文档var view = sap.ui.xmlview("view.Detail"); 总是创建一个新视图。

        但是我仍然在努力指定 xmlview 的 id。由于“___xmlview1”是动态命名的,数字 1 表示应用程序中的视图序列号。因此,如果我在创建“view.Detail”之前创建另一个视图,则 id 将指向新视图。

        我正在创建这样的 xmlview:

        <mvc:XMLView viewName="view.Detail"></mvc:XMLView>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多