2017-08-24 115 views
0

我想弄清楚如何將數據模型綁定到自定義控件。我在這裏搜索了一些類似的問題,但他們似乎不符合我想要做的。也許我的方法是錯誤的。SAPUI5自定義控件綁定

無論如何,我已經創建了一個Plunkr(https://plnkr.co/edit/UghwOObcDn1oRndOpCeJ)來演示。創建兩個輸入字段,其中一個位於擴展sap.m.Panel的自定義控件上。我試圖將名稱啓用屬性綁定到兩個輸入字段。簡單sap.m.Input沒有問題,但在自定義控件中的一個MyPanel沒有這樣的運氣。 名稱已啓用兩個輸入字段的屬性應該在按下按鈕時更改。

對於自定義控制我試圖綁定屬性傳遞給啓用了嵌入式輸入場的性質如可在App.view.xml看到。

如果我更改了MyPanel.js如下:

value: mSettings.value, 
enabled: mSettings.enabled 

value: '{/name}', 
enabled: '{/editing}' 

一切工作正常。

任何幫助或方向將不勝感激。

回答

2

您必須在自定義控件中定義「值」和「啓用」屬性。要獲得綁定工作,您需要在擴展控件中使用自定義setter/getter方法。這些方法在綁定更新時被調用。

這裏是更新link

sap.m.Panel.extend('my.App.MyPanel', { 
constructor: function(mSettings) { 
sap.m.Panel.apply(this, arguments); 

this.ef = new sap.m.Input({ 
    width: '100px', 
    value: mSettings.value, 
    enabled: mSettings.enabled 
}); 

this.setAggregation('_ef', this.ef); 
}, 

metadata: { 
    properties: { 
    enabled: { type: 'boolean', defaultValue: true }, 
    value: { type: 'String', defaultValue: "" } 
    }, 

    events: { 
    }, 

    aggregations: { 
    _ef: { type: 'sap.m.Input', multiple: false, visibility: 'hidden' } 
    } 
}, 

init: function() { 
}, 

renderer: function(oRM, oControl) { 
    oRM.renderControl(oControl.getAggregation('_ef')); 
}, 

setValue: function (sValue) { 
    this.ef.setValue(sValue); 
}, 

setEnabled: function (bValue) { 
    this.ef.setEnabled(bValue); 
}, 

getValue: function(){ 
    return this.ef.getProperty("value"); 
}, 

getEnabled: function(){ 
    return this.ef.getProperty("enabled"); 
} 

}); 
+0

嗯。我將你的代碼複製到Plunker中。仍然沒有去。 – Terry

+0

我已經更新了代碼,應該立即工作.. –