实现此目的的另一种方法是使用 EventProvider 中的 attachEventOnce 方法。
oModel.attachEventOnce("requestCompleted", function(oEvent) {
console.log(JSON.parse(oEvent.getParameter("response").responseText));
}, this);
当您只需要响应一个请求而不是全部请求时,最好使用这种方法。否则,如果您使用oModel.attachRequestCompleted(...),所有请求都将通过相同的处理函数。
您还可以使用方法链接来简化此操作。
oModel.attachEventOnce(...) 返回调用该方法的对象,因此您可以在一个语句中加载数据并处理回调。
oModel.attachEventOnce("requestCompleted", function(oEvent) {
console.log(JSON.parse(oEvent.getParameter("response").responseText));
}, this).loadData("http://127.0.0.1/data/config.json");
这将首先执行loadData() 请求,然后在请求完成后控制台响应。它只会在第一次发出请求时使用回调函数。后续请求不会经过回调函数。
如果您希望所有请求都通过相同的回调函数,您可以做同样的事情,但使用oModel.attachRequestCompleted(...)
oModel.attachRequestCompleted(function(oEvent) {
console.log(JSON.parse(oEvent.getParameter("response").responseText));
}, this).loadData("http://127.0.0.1/data/config.json");
这将执行loadData() 请求,控制响应,同时控制所有后续请求的响应。
注意:在回调函数中使用this 时要小心。如果你不将this 作为attachRequestCompleted(...) 或attachEventOnce(...) 方法的参数传递,那么this 将失去它作为控制器的原始上下文,并继承调用函数的对象的上下文。 herrlock 的回答演示了this 的上下文如何变化。
Event Provider API Reference