2015-12-30 66 views
0

我創建了一個包含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代碼。

+0

你可以發佈全新的自定義控制器嗎? –

+0

我添加了我的渲染器功能併爲您更新了我的問題。我的其他代碼是d3.js,我在下面的鏈接中分享了我的問題 – melomg

+0

@melong:你繼承了一些控制嗎?或從頭開始寫作? –

回答

0

它是通過改變

oRm.writeControlData(layout);這一行如下解決:

oRm.writeControlData(oControl);

1

其實你的代碼看起來不錯。 接受你指定的:

bindable: 'bindable' 

該怎麼辦? 和rerender()是什麼?

呈現控件的方法稱爲renderer()

但是,當你說你不需要調用它:

this.setProperty("currentValue", iCurrentValue); 

如果你不說真的會重新描繪的控制。

很高興知道你的renderer()函數裏面有什麼,或者當你撥打getCurrentValue()時會發生什麼。

+0

我從源創建自定義控件時看到了可綁定的內容。 :)我認爲它對綁定項目如bindItems方法很有用。但我不知道這件事。我會稍後再搜索它。我現在刪除它並在我的setCurrentValue函數中,我也刪除了重新渲染函數並進行了更新。我使用rerender方法,因爲我試圖再次渲染自定義控件,並且它是渲染的唯一函數:)但仍然沒有渲染 – melomg

相關問題