2015-11-24 23 views
5

Ecco una configurazione per la formula:Come associare correttamente una formula con un negozio in Sencha ExtJs v6?

formulas: { 
    //this binding with the store did not work :(
    countDeactivatedVehicles: { 
     bind: { 
      bindTo: "{organizationCars}", 
      deep: true, 
     }, 

     get: function (store) { 
      return store.query("isCarActive", false).getCount(); 
     } 
    } 
} 

(attualmente ora il conteggio che vogliamo solo viene visualizzato una volta inizialmente il che significa che il carico funziona bene)

Quando i modelli all'interno delle organizationCars negozio hanno un attributo aggiornato l'associazione non funziona, il negozio non è avvisato che i suoi modelli sono stati aggiornati.

Ciò che dovrebbe accadere idealmente è quando il modello viene aggiornato, l'evento viene propagato all'archivio in modo che il negozio sappia che è cambiato. In questo modo il binding funzionerebbe (?) E la formula verrebbe calcolata.

risposta

0

Non penso che sia effettivamente possibile utilizzare le formule, ma è possibile utilizzare gli eventi.

ascoltando loaddatachanged e update eventi si può essere informati di eventuali modifiche al negozio, da qui si può fare quello che si potrebbe fare in una formula e impostare manualmente sul ViewModel.

Questo violino mostra la soluzione migliore: https://fiddle.sencha.com/#view/editor&fiddle/1qvf

Conservare

Ext.define('Fiddle.Store', { 
    extend: 'Ext.data.Store', 
    alias: 'store.test', 
    listeners: { 
     load: 'storeUpdate', 
     update: 'storeUpdate', 
     datachanged: 'storeUpdate' 
    }, 
    fields: [{ 
     name: 'include', 
     type: 'bool' 
    }] 
}); 

ViewModel

Ext.define('Fiddle.StoreBinderViewModel', { 
    extend: 'Ext.app.ViewModel', 
    alias: 'viewmodel.storebinder', 
    stores: { 
     teststore: { 
      type: 'test' 
     } 
    }, 
    data: { 
     includedTotal: 0 
    } 
}); 

controller

Ext.define('Fiddle.StoreBinderController', { 
    extend: 'Ext.app.ViewController', 
    alias: 'controller.storebinder', 
    storeUpdate: function (store) { 
     var recs = store.query('include', true); 
     this.getViewModel().set('includedTotal', recs.length) 
    } 
});