2015-11-24 2 views
5

Hier ist eine Konfiguration für die Formel:Wie binden Sie eine Formel korrekt mit einem Speicher 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(); 
     } 
    } 
} 

(zur Zeit nun die Zählung, die wir wollen nur einmal, dass es funktioniert ok auf Last anfänglich angezeigt wird, was bedeutet)

Wenn die Modelle in den Speicher organizationCars haben Wenn ein Attribut aktualisiert wurde, funktioniert die Bindung nicht. Der Speicher wird nicht darauf hingewiesen, dass seine Modelle aktualisiert wurden.

Im Idealfall sollte das Modell aktualisiert werden, wenn das Modell aktualisiert wird. Das Ereignis wird an den Speicher weitergegeben, damit der Speicher weiß, dass er geändert wird. Auf diese Weise würde die Bindung funktionieren (?) Und die Formel würde berechnet werden.

Antwort

0

Ich denke nicht, dass dies tatsächlich mit Formeln möglich ist, aber Sie können Ereignisse verwenden.

von zu loaddatachanged und update Ereignisse hören Sie über alle Änderungen in den Laden benachrichtigt werden kann, von hier aus können Sie tun, was Sie in einer Formel tun würde, und manuell auf dem Ansichtsmodell gesetzt.

Diese Geige zeigt die Lösung am besten: https://fiddle.sencha.com/#view/editor&fiddle/1qvf

Shop

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

Ansichtsmodell

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) 
    } 
}); 
Verwandte Themen