2014-11-07 7 views
6

Sto cercando un evento che verrà generato se l'ODataModel (lato client) verrà modificato. Il problema è che nella mia applicazione ci sono molti campi diversi che sono in grado di modificare il modello. In caso di modifica del modello avrei una funzione registrata che abilita un pulsante "Salva". Il pulsante "Salva" chiamerà il submitChanges() del modello (io uso la modalità TwoWayBinding).SAPUI5: come ottenere una notifica di un evento in caso di modifiche di ODataModel?

Attualmente ho rilevato solo il metodo "hasPendingChanges()", ma nessun evento che potevo registrare.

Qual è la soluzione suggerita per gestire questo problema?

Per gestire il cambiamento in ogni controllo "Input" sembra non essere un bel modo, perché è facile dimenticare alcuni campi (almeno se qualcun altro manterrà il codice).

mie soluzioni attuali è simile a questo ora:

sap.ui.model.odata.ODataModel.extend("MyModel", { 
    setProperty : function(sPath, oValue, oContext) { 
    sap.ui.model.odata.ODataModel.prototype.setProperty.apply(this, [sPath, oValue, oContext]); 
    // do something here 
    } 
}); 
+2

Come sull'override sap.ui.model.odata.ODataModel.prototype.setProperty? – cschuff

+0

Ho controllato la documentazione, ed è davvero stupido ma non sembra esserci un evento di cambiamento. Penso che la risposta di @cschuff sia la strada da percorrere. –

risposta

7

È possibile utilizzare sap.ui.model.Binding.attachChange()

var binding = new sap.ui.model.Binding(model, "/", model.getContext("/")); 
binding.attachChange(function() { 
    saveButton.setVisible(true); 
    saveButton.setEnabled(true); 
    //or anything else 
}); 

La funzione viene chiamata ogni volta che il modello cambia, ad esempio. chiamando lo model.setProperty(key, value).

https://openui5.netweaver.ondemand.com/#docs/api/symbols/sap.ui.model.Binding.html

+0

Il problema con 'sap.ui.model.Binding' è ogni volta che otteniamo un nuovo oggetto e di nuovo abbiamo bisogno di registrare un evento, ecco perché chiama la stessa funzione due volte, ci sono modi per ottenere l'esistenza di' sap.ui.model Oggetto .Binding', – MH09

+0

Esiste un metodo 'someObject.getBinding();' (https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.base.ManagedObject.html#getBinding) . Penso che tu possa allegare eventi anche lì. – herrlock

+0

Ciao, dove nel controller stai impostando questo aggancio? – alexd

Problemi correlati