Geo*_*los 5 data-binding extjs
以下是公式的配置:
formulas: {
//this binding with the store did not work :(
countDeactivatedVehicles: {
bind: {
bindTo: "{organizationCars}",
deep: true,
},
get: function (store) {
return store.query("isCarActive", false).getCount();
}
}
}
Run Code Online (Sandbox Code Playgroud)
(目前我们想要的计数最初只显示一次,这意味着在加载时它可以正常工作)
当商店organizationCars内的模型更新属性时,绑定不起作用,商店不会被警告其模型已更新.
理想情况下应该发生的是当模型更新时,事件被传播到商店,以便商店知道它已被更改.这样绑定就可以工作(?),并且计算公式.
我认为使用公式实际上不可能做到这一点,但您可以使用事件来做到这一点。
通过监听load
datachanged
和update
事件,您可以收到有关商店的任何更改的通知,从这里您可以执行在公式中执行的操作并在 ViewModel 上手动设置。
这个小提琴显示了最好的解决方案:https ://fiddle.sencha.com/#view/editor&fiddle/1qvf
Ext.define('Fiddle.Store', {
extend: 'Ext.data.Store',
alias: 'store.test',
listeners: {
load: 'storeUpdate',
update: 'storeUpdate',
datachanged: 'storeUpdate'
},
fields: [{
name: 'include',
type: 'bool'
}]
});
Run Code Online (Sandbox Code Playgroud)
Ext.define('Fiddle.StoreBinderViewModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.storebinder',
stores: {
teststore: {
type: 'test'
}
},
data: {
includedTotal: 0
}
});
Run Code Online (Sandbox Code Playgroud)
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)
}
});
Run Code Online (Sandbox Code Playgroud)