this.getView()不起作用 - SAPUI5

时间:2015-08-06 16:08:44

标签: controller this sapui5

我一直试图在我的控制器上使用this.getView()几次,但我总是在我的控制台上得到getView不是函数错误。

是否有任何“技巧”或我可以做的事情来使这项工作?

Heres是我如何使用它的一个例子(这是我在我的控制器中创建的一个函数):

formatIconStatus: function(status){
         var view = this.getView();
         if (status != null){
             if (status == "YES"){
                 status = "sap-icon://accept";
             }else{
                 status = "sap-icon://error";
             }
             return status;
         }
     },

提前致谢!

1 个答案:

答案 0 :(得分:8)

是的,有。如果您在格式化程序函数中使用JSView this,并且事件侦听器指向它所属的Control。对于格式化程序函数,您可以通过分配此示例中的函数来更改此项:

new sap.m.Button({
    text : {
        path : "/buttonText",
        formatter : $.proxy(oController.myTextFormatter, oController);
    }
});

jQuery.proxy的帮助下,您可以将this内的myTextFormatter设置为oController。这样您就可以在格式化程序中调用this.getView(),因为this现在将指向控制器。

为了设置事件监听器的范围,您可以使用与上面所示相同的方式分配函数,也可以使用框架提供的其他方法,如下例所示:

new sap.m.Button({
    press : [oController.myPressHandler, oController]
});

使用此表示法,框架将使用数组的第二个条目作为范围调用事件侦听器(myPressHandler)。

此模式适用于UI5框架中的大多数事件侦听器。基本上,在分配事件侦听器时有三个选项:

  • fnListenerFunction
  • [fnListenerFunction,oListenerScope]
  • [oData,fnListenerFunction,oListenerScope]

使用XMLViews时,您不必手动设置范围,因为它默认设置为关联的控制器。