如何覆盖SAPUI5的钩子方法

时间:2016-03-16 06:20:13

标签: user-interface sap sapui5

我想在外部调用钩子方法 onBeforeRendering onAfterRendering 。我的要求是,当我的3/4 ajax调用完成时,我正在渲染UI部分,之后我需要调用这两种方法。

3 个答案:

答案 0 :(得分:1)

如上所述,我认为您的架构是错误的。我会建立这样的东西:

var self = this;

$.ajax(firstURL, {
    method: "GET",
    contentType: "application/json",
}).fail(function(response) {
    // handle error
}).done(function(data) {
    // do something with the returned data from first call
    $.ajax(secondURL, {
        method: "GET",
        contentType: "application/json",
    }).fail(function(response) {
        // handle error
    }).done(function(data) {
        // do something with the returned data from second call
        $.ajax(thirdURL, {
            method: "GET",
            contentType: "application/json",
        }).fail(function(response) {
            // handle error
        }).done(function(data) {
            // build extra UI elements, for example:
            var someContainer = self.getView().byId("myContainer"); // ui element where you add more controls
            someContainer.addContent(new com.initrode.MyCustomControl({ 
                value : data.someProperty, 
                change : self.doSomething
            }));
        });
    });
});

如你所见:

  • 不接听onBeforeRendering/AfterRendering
  • AJAX调用是嵌套的,但是异步(Promises解决了这里的“同步”问题)
  • 内联设置自定义控件事件处理程序(在本例中为change),因此无需额外的事件注册
  • 无需设置任何控件的ID(布局元素除外,您需要在ajax调用成功完成后添加所需的额外控件)

答案 1 :(得分:0)

正如@Qualiture在评论中所说,你不能将这些方法称为钩子,在呈现控件之前和之后由框架调用。

然而,您可以“询问”重新呈现控件,然后通过调用oControl.rerender()oControl.invalidate()

来调用两个挂钩

答案 2 :(得分:0)

我不知道你是否可以为你的场景做到这一点,但在类似的情况下,我能够即时切换渲染(一旦控件所需的所有ajax调用都完成,通过在应用程序中利用模型绑定来呈现控件。

即如果控件需要加载某些“数据”对象,请将控件绑定到将由ajax调用更新的模型“/ data”,并使用类似{= $ {/ data的内容来管理控件可见属性} || false}

实际上,这在某种程度上依赖于框架在检测到模型中的更改时调用控件的渲染器函数。