Binding de entrada de etiqueta XML omitida en Openui5 XMLModel -- xml campo con binding campo con sapui5 camp Relacionados El problema

Skipped XML tag input binding in OpenUI5 XMLModel


0
vote

problema

Español

Ejemplo XML:

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

No hay una etiqueta de texto1 en el segundo artículo. Este XML se carga en XMlmodel, que está unido a la tabla con SAP.M.Inputs en células.

No es posible editar la celda correspondiente a la etiqueta XML omitida: después de que la entrada pierda el texto de enfoque simplemente desaparece. Esto no es así si se usa JSONModel: se crean nuevos artículos. ¿Es posible hacerlo similar para XMLModel?

La prueba está disponible aquí: http://embed.plnkr.co/wa0obxbq6exfj3nqnkmq/ < / p>

Original en ingles

Sample XML:

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

There is no text1 tag in second item. This XML is loaded to XMLModel which is bound to Table with sap.m.Inputs in cells.

It is not possible to edit cell corresponding to skipped XML tag: after input losing focus text just disappears. This is not so if using JSONModel: new items are created. Is it possible to do similar for XMLModel too?

Test is available here: http://embed.plnkr.co/wa0oBXbq6Exfj3NqNKmQ/

        

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

En primer lugar, creo que es un error de Xmlmodel .

Ver el método setProperty https://openui5.hana.ondemand.com/resources/sap/ui/model/xml/xmlmodel-dbg.js "rel = "NOFOLQUE NOREFERRER"> XMLMODEL .

  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;  };   

En la última declaración, Oobject estaría vacía con Spath "Text1". Así que el nuevo valor no está establecido.

oObject = esto._getObject (Spath, Ocontext);

Mientras que si ve el método setProperty https://openui5.hana.ondemand.com/resources/sap/ui/model/json/jsonmodel-dbg.js "rel =" nofollow noreferrer "> jsonmodel .

  JSONModel.prototype.setProperty = function(sPath, oValue, oContext, bAsyncUpdate) {     var sResolvedPath = this.resolve(sPath, oContext),         iLastSlash, sObjectPath, sProperty;      // return if path / context is invalid     if (!sResolvedPath) {         return false;     }      // If data is set on root, call setData instead     if (sResolvedPath == "/") {         this.setData(oValue);         return true;     }      iLastSlash = sResolvedPath.lastIndexOf("/");     // In case there is only one slash at the beginning, sObjectPath must contain this slash     sObjectPath = sResolvedPath.substring(0, iLastSlash || 1);     sProperty = sResolvedPath.substr(iLastSlash + 1);      var oObject = this._getObject(sObjectPath);     if (oObject) {         oObject[sProperty] = oValue;         this.checkUpdate(false, bAsyncUpdate);         return true;     }     return false; };   

Marque la línea debajo de la línea, SOBECTPATH ​​sería '/ items / 1' , por lo que se devuelve el oObject y el nuevo valor se establece .

var oobject = esto._getObject (SOBECTPATH);

Espero que ayude. Gracias.

 

first of all, I believe it is a bug of XMLModel.

See the setProperty method of XMLModel.

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;  }; 

In the last else statement, oObject would be empty with sPath "text1". so the new value is not set.

oObject = this._getObject(sPath, oContext);

While if you see the setProperty method of JSONModel.

JSONModel.prototype.setProperty = function(sPath, oValue, oContext, bAsyncUpdate) {     var sResolvedPath = this.resolve(sPath, oContext),         iLastSlash, sObjectPath, sProperty;      // return if path / context is invalid     if (!sResolvedPath) {         return false;     }      // If data is set on root, call setData instead     if (sResolvedPath == "/") {         this.setData(oValue);         return true;     }      iLastSlash = sResolvedPath.lastIndexOf("/");     // In case there is only one slash at the beginning, sObjectPath must contain this slash     sObjectPath = sResolvedPath.substring(0, iLastSlash || 1);     sProperty = sResolvedPath.substr(iLastSlash + 1);      var oObject = this._getObject(sObjectPath);     if (oObject) {         oObject[sProperty] = oValue;         this.checkUpdate(false, bAsyncUpdate);         return true;     }     return false; }; 

Check the below line, sObjectPath would be '/items/1', so the oObject is returned and the new value is set.

var oObject = this._getObject(sObjectPath);

Hope it helps. Thank you.

 
 

Relacionados problema

0  Cómo tomar el valor de la casilla de verificación del artículo de la lista en SAP UI5  ( How to take list item checkbox value in sap ui5 ) 
xml vista <List id="facebookList" items="{/}" mode="MultiSelect" selectionChange="onSelectionChange"> <StandardListItem type="Navigation" title="{ac...

1  ¿Cómo configurar la identificación de una vista XML en un entorno de componentes?  ( How to set id of a xml view in a component environment ) 
Quiero acceder al controlador de una vista desde un módulo personalizado con algunas funciones de utilidad. Básicamente puedes hacer esto de esa manera: va...

0  Sapui5 PendingHanges se pierde  ( Sapui5 pendingchanges get lost ) 
Estoy trabajando en una aplicación SAPUI5 con Servicios Odata. Para evitar la pérdida de cambios en caso de un error al actualizar un entidades. Tengo una lla...

2  Problema de control personalizado D3JS en Openui5  ( D3js custom control issue in openui5 ) 
Estoy usando Openui5 Tabstrip. Cada pestaña contiene Seperate J y Controller. Nuevamente, cada pestaña contiene dos vistas (estoy usando sap.m.navcontainer) y...

2  SAPUI5 y LOGON TOKENS / SSO?  ( Sapui5 and logon tokens sso ) 
Estoy empezando con SAP's sapui5 Framework , y estoy tratando de obtener una señal única para trabajar con tokens de inicio de sesión (MySapsso2), pero no v...

6  ¿Cómo vincular directamente dos propiedades de datos en una propiedad de control usando el modelo ODATA?  ( How to directly bind two data properties into one control property using odata m ) 
Estoy usando un modelo ODATA para enlazar los controles de la UI a los servicios de GW. En los metadatos de servicio, existen, digamos, "Nombre" y "apellido" ...

1  OPA5: PROPÓSITO DE "Y" EN PROMESA RENDIDO DE SERVICIOS  ( Opa5 purpose of and in promise returned from waitfor ) 
Soy un poco nuevo para las pruebas de integración con OPA5, por lo que estaba leyendo un TUTORIAL EN LA GUÍA DE DEV . Hay este and ANTES DE iTeardownMyApp...

-1  Notificaciones en SAP FIORI  ( Notifications in sap fiori ) 
Estoy trabajando en una aplicación SAP PM FIORI que consume un servicio de odata en HCP. Tuve la idea de mostrar notificaciones (como Facebook) en caso de q...

1  ¿Cómo puedo poner múltiples casillas de verificación en una línea con sus etiquetas?  ( How can i put multiple check boxes in one line with their labels ) 
Quiero diseñar algo como la siguiente imagen con los campos inteligentes: Cuando intento diseñarlo con el siguiente código: <smartForm:GroupElement> ...

0  SAPUI5 TextView no funciona como se esperaba  ( Sapui5 textview not working as expected ) 
Quiero colocar un control SAPUI5 de texto SAPUI5 en el estado de DIV seguido por la Salesorder DIV. Inicialmente, se comenta la colocación de la vista de ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos