2016-05-06 37 views
0

我在SAPUI5中編寫了一個前端程序,它應該允許用戶將數據(如字符或數字)輸入到表中,然後在單擊後讀取數據在「提交」按鈕上從sapui5的表中讀取用戶輸入

到目前爲止我所看到的是與從選定行獲取數據相關的所有內容。

我對這個領域真的很陌生,所以我很感激任何幫助!我正在使用sap.ui.commons.table.Table。該表最初從JSON文件獲取數據,但我已經完成了測試綁定。

//data definition: 
var oPosData = [{PoItemI : "0010"}]; 

//Table: 
var oTable = new sap.ui.table.Table("PoData",{ 
    //title: "Positionsdetails", 
    visiblRowCount: 5, 
    firstVisibleRow: 3, 
    selectionMode: sap.ui.table.SelectionMode.Single 
}); 

// For simplicity, i will just ad 1 column to the table. but i have more 
//Positionsnummer: 
    var oColumn_PosNr = new sap.ui.table.Column("PosNr",{ 
    label: new sap.ui.commons.Label({text: "Position"}), 
    //template: new sap.ui.commons.TextView().bindProperty("text", "Positionsnummer"), 
    template: Input1 = new sap.ui.commons.TextField("PosNrTF",{ 
     key: "text", 
     value: "{PoItemI}" 
    }), 
    //sortProperty: "Positionsnummer", 
    //filterProperty: "Positionsnummer", 
    width: "200px" 
}); 

//Input1.setValue("Bla"); Input1.getValue()); 
//Input1.attachChange(function(oEvent) { 
    var output = oEvent.getSource().getBindingContext().getPath(); 
    alert('Text changed to : '+ output); 
    console.log(output) 
}); 
oTable.addColumn(oColumn_PosNr); 

//Create a model and bind the table rows to this model 
var oModel_Item = new sap.ui.model.json.JSONModel(); 
oModel_Item.setData({modelData: oPosData}); 
oTable.setModel(oModel_Item); 
oTable.bindRows("/modelData"); 

用這個表控件做錯了嗎?或者我在做綁定錯誤?當我嘗試閱讀它不起作用。

我也很難解開控件的綁定部分。

// Submit button 
// I would be happy if this button prints me the value, that is stored in the 
//table 

var oButton1 = new sap.ui.commons.Button({ 
text : "Submit", 
style: sap.ui.commons.ButtonStyle.Emph, 
width: '50%', 
//tooltip : "", 
//press : function() {alert('Pressed me' +);} 
press : function() { 

var table_model = sap.ui.getCore().getControl("PoData").getModel();//.getPath();//.getPath(); 
var table_row = sap.ui.getCore().getControl("PoData").getRows()[1].getCells()[1];//.getValue(); 
var table_path = sap.ui.getCore().getControl("PosNrTF").getBindingContext(table_model);//.getPath(); 
var table_column_LABEL = oTable.getColumns()[0].getLabel().mProperties.text; 
var table_column_template = oTable.getColumns()[0][1];//getBindingContext(); 

alert(table_column_LABEL); 
alert(table_model); 
alert(table_row); 
alert(table_path); 
alert(table_column_template); 

}, 
layoutData : new sap.ui.layout.GridData({ 
    indent: "L5 M5", 
    span: "L1 M6 S12" 
}) 

}); 

我無法獲得存儲在列的模板部分中的值(如果存儲在該列中)。

我是否應該以不同的方式將行添加到表中而不是列中?我遇到了CustomData內容但不知道如何使用它,如果這解決了問題?如果我只對用戶輸入的數據感興趣,或者綁定可以通過雙向綁定(不知道如何做到這一點)通過「自動更新值」來幫助我,我應該使用綁定嗎?

回答

0

我有點困惑,因爲你的解釋是不明確的,但讓我們看看在你的代碼的一些寶貴的意見:

  • 首先,我會建議使用sap.m.Table對象當涉及到高效使用時創建表。它的響應速度很快,支持移動設備,並且在官方的Fiori應用程序中也得到了廣泛的使用和維護。
  • 您的綁定正在工作。由於默認情況下JSONModel設置爲雙向綁定(但是我應該看到項目的引導部分確認),輸入中輸入的數據會自動更新到您的模型中。所以如果你想創建一個轉發信息的發送按鈕,你不必訪問表格,行或者甚至列;只是處理JSON模型。
  • //Input1.attachChange(function(oEvent) { var output = oEvent.getSource().getBindingContext().getPath(); alert('Text changed to : '+ output); console.log(output) }); 此事件處理程序提供了一個oEvent對象,其中包含新值本身(oEvent.getParameter("newValue"))。如果要從分配給該字段的模型中檢索對象,請使用以下代碼片段:oTable.getModel().getProperty(output);

  • 您不必向列中添加列;它是通過爲行聚合創建的聚合綁定完成的。

  • CustomData用於將數據附加到(UI)元素並在稍後檢索(如隱藏屬性)。你不必在這種情況下使用它。
  • 在大多數情況下,綁定是一個不錯的選擇。稍後,您可以使用綁定和數據類型來驗證表單;它也是聚合(表格行,列表元素等)的絕佳解決方案。所以我會推薦使用它。
+0

嗨nistv4n並感謝您的幫助! 當我打印/提醒它的值是空白的。我昨天晚上找到了一個解決方法,我將放在這裏。我所做的更改是首先讓我的表本身可編輯(而不僅僅是列)。我不知道這是如何影響它的,但是我添加了一個「添加」按鈕,在這裏我簡單地使用push來將新的初始數據推入我的數據字段, –

0

嗨nistv4n和感謝您的幫助!

當我打印/提醒它的值是空白的。我昨天晚上找到了一個解決方法,我將放在這裏。我所做的更改是首先讓我的表本身可編輯(而不僅僅是列)。我不知道這是如何影響它,但後來我添加了一個「添加」按鈕,在那裏我只是用推,以推動新的初始數據到我的數據字段,

東西像oPosData.push({ PosItemA:「init」}); 然後我更新了模型,它將它綁定到表 oModel_Item.setData({modelData:oPosData}); 這迫使它創建一個新的行,我可以編輯我喜歡和我能夠通過簡單的oPosData [我創建的行的索引]檢索數據.PosItemI

我每次使用計數器我按了添加按鈕,以便能夠訪問oPosData中的所有數據