2017-03-20 182 views
0

示例XML綁定:跳過XML標籤輸入OpenUI5 XMLModel

<data> 
    <items> 
    <item><text1>text 1.1</text1><text2>text 1.2</text2></item> 
    <item><text2>text 2.2</text2></item> 
    </items> 
</data> 

有一個在第二個項目沒有text1的標籤。 此XML被加載到這勢必表與細胞sap.m.Inputs XMLModel。

這是不可能的編輯對應單元跳過XML標籤:輸入後失去焦點的文本就會消失。這不是如果使用JSONModel:創建新項目。是否有可能爲XMLModel做類似的事情?

測試可以在這裏找到:http://embed.plnkr.co/wa0oBXbq6Exfj3NqNKmQ/

回答

1

首先,我相信這是XMLModel的錯誤。

XMLModelsetProperty方法。

XMLModel.prototype.setProperty = function(sPath, oValue, oContext, bAsyncUpdate) { 
    var sObjectPath = sPath.substring(0, sPath.lastIndexOf("/") + 1), 
     sProperty = sPath.substr(sPath.lastIndexOf("/") + 1); 

    // check if path/context is valid 
    if (!this.resolve(sPath, oContext)) { 
     return false; 
    } 

    if (!this.oData.documentElement) { 
     jQuery.sap.log.warning("Trying to set property " + sPath + ", but no document exists."); 
     return false; 
    } 
    var oObject; 
    if (sProperty.indexOf("@") == 0) { 
     oObject = this._getObject(sObjectPath, oContext); 
     if (oObject[0]) { 
      oObject[0].setAttribute(sProperty.substr(1), oValue); 
      this.checkUpdate(false, bAsyncUpdate); 
      return true; 
     } 
    } else { 
     oObject = this._getObject(sPath, oContext); //oObject would be empty 
     if (oObject[0]) { 
      jQuery(oObject[0]).text(oValue); 
      this.checkUpdate(false, bAsyncUpdate); 
      return true; 
     } 
    } 
    return false; 

}; 

在最後else語句,oObject將是空的,SPATH 「text1」 中。所以新值沒有設置。

oObject = this._getObject(sPath,oContext);

雖然如果您看到JSONModelsetProperty方法。

​​

檢查以下線,sObjectPath將'/項/ 1',所以返回oObject和新的值設置

var oObject = this._getObject(sObjectPath);

希望它有幫助。謝謝。

+0

這是一個很好的觀察。這看起來很有趣... –