我一直试图在我的控制器上使用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;
}
},
提前致谢!
答案 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框架中的大多数事件侦听器。基本上,在分配事件侦听器时有三个选项:
使用XMLViews时,您不必手动设置范围,因为它默认设置为关联的控制器。