2017-09-04 3 views
2

Le résultat initialement affiché dans un contrôle de texte est multiplié par le prix, la quantité chargée depuis Odata et affichée dans le contrôle d'entrée. Le but est, le résultat devrait être automatiquement mis à jour dans ce contrôle de texte après que le nouveau prix et la nouvelle quantité aient été saisis dans le contrôle de saisie. Avec le _onChange() je peux changer les propriétés (dans ce cas sont le prix et la quantité) de OData (j'ai vu les propriétés mises à jour et résultat dans le module de débogueur). Mais le résultat mis à jour n'apparaît tout simplement pas dans le contrôle de texte, est-ce que quelqu'un a une idée?Modification de la valeur OData dans le contrôle Texte à l'aide de JS et XML

XML:

<t:Column> 
    <Text text="Price"/> 
    <t:template> 
     <Input id="price" value="{Prc}" editable="true" change="_onChange"/> 
    </t:template> 
</t:Column> 
<t:Column> 
    <Text text="Quantity"/> 
    <t:template> 
     <Input id="quantity" value="{Qty}" editable="true" change="_onChange"/> 
    </t:template> 
</t:Column> 

JS:

_onChange: function(oEvent){ 
    var test = oEvent.getSource(); 
    var path = test.getBindingContext().getPath(); 
    var obj = oModel.getProperty(path); 

    var stringID=test.sId; 
    //determine the current control using the predefined ID 
    switch(oEvent!=null){ 
    case stringID.match("quantity")!=null 
     //read the Input of quantity in Input control 
     obj.Qty = test._$input.context.value; 
     break; 
    case stringID.match("price")!=null: 
     //read the input of price in Input control 
     obj.Prc = test._$input.context.value; 
     break; 
}; 
var sum = parseInt(obj.Prc) * parseInt(obj.Qty); 
obj.Result =sum.toString(); 
} 

Répondre

0

J'ai résolu le problème. Le problème était: l'identificateur de contrôle, que j'ai défini pour l'entrée (dans ce cas était id="quantity"), n'a pas pu être trouvé par le oEvent car l'identificateur de contrôle a été généré dynamiquement (dans ce cas, par exemple: id="__xmlview1--TBL_ep"). Pour finaliser cet identifiant dynamique, nous devons utiliser var oSTBL_EP = this.getView().byId("quantity");, puis appeler la propriété sID de oSTBL_EP. Uniquement avec un ID valide, la valeur peut être visible dans le contrôle de texte

1

Si vous avez lié résultat dans le modèle, l'utiliser pour mettre à jour le modèle.