为什么我的视图不会按预期重新渲染?

时间:2015-12-30 12:43:46

标签: javascript custom-controls sapui5

我创建了一个包含currentValue属性的自定义控件。我在元数据中定义如下:

properties: 
{
    currentValue: 
    {
        type: 'int',
        defaultValue: 0
    },...

在我的Main.controller.js中我正在调用我创建的自定义控件并更改了它的currentValue属性,如下所示。

var oCustomControl = this.getView().byId("customID1");
oCustomControl.setCurrentValue(75);

在我的control.js的这一步中,我没有创建一个setCurrentValue函数。因为我知道UI5本身正在创建它。但是我的控件的currentValue属性无法更新。所以我认为我的控制权无法重新出现。所以我覆盖了currentValue setter并将其更改如下:

setCurrentValue : function(iCurrentValue)
{
    this.setProperty("currentValue", iCurrentValue);
},

但我仍然看不到我在视野中改变的价值。

这是我的渲染器:

renderer : 
{

    render : function(oRm, oControl) {



        var layout = oControl.createGauges();//I created layout

        oRm.write("<div");
        oRm.writeControlData(layout);
        oRm.writeClasses(); 
        oRm.write(">");
        oRm.renderControl(layout);
        oRm.addClass('verticalAlignment');
        oRm.write("</div>");
    }
},

我现在想的可能是因为我将布局渲染为控件?

我的其他属性与d3.js相关。我在onAfterRendering函数中编码了d3.js代码。

2 个答案:

答案 0 :(得分:1)

实际上你的代码看起来很好。 接受您指定的内容:

bindable: 'bindable'

该怎么办? 什么是rerender()

呈现控件的方法称为renderer()

但是当你说:

时,你不需要打电话
this.setProperty("currentValue", iCurrentValue);

如果你不这么说,它会重新呈现控制权。

最好知道renderer()功能中的内容,或者拨打getCurrentValue()时会发生什么。

答案 1 :(得分:0)

通过更改

解决

oRm.writeControlData(layout);这一行如下:

oRm.writeControlData(oControl);