2015-11-24 21 views
5

Oto konfiguracja wzoru:Jak poprawnie powiązać formułę ze sklepem w 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(); 
     } 
    } 
} 

(obecnie teraz liczyć, że chcemy jest wyświetlany tylko raz początkowo co oznacza, że ​​na obciążenia działa ok)

Kiedy modele wewnątrz organizationCars sklepowych mają atrybut zaktualizowany powiązanie nie działa, sklep nie jest informowany, że jego modele zostały zaktualizowane.

Co najlepiej powinno się stać, gdy model zostanie zaktualizowany, zdarzenie zostanie przekazane do sklepu, aby sklep wiedział, że został zmieniony. W ten sposób wiązanie zadziała (?), A formuła zostanie obliczona.

Odpowiedz

0

Nie sądzę, że jest to faktycznie możliwe przy użyciu formuł, ale można robić przy użyciu zdarzeń.

słuchając loaddatachangedupdate i wydarzeń może być powiadamiany o wszelkich zmianach w sklepie, stąd można zrobić to, co byś zrobił w formule i ręcznie ustawić na ViewModel.

Ten skrzypce pokazuje najlepsze rozwiązanie: https://fiddle.sencha.com/#view/editor&fiddle/1qvf

Store

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) 
    } 
}); 
Powiązane problemy