如何从dataview';ExtJS6中的第三方语言是什么?
我正在尝试测试dataview的tpl中的combobox值:如何从dataview';ExtJS6中的第三方语言是什么?,extjs,extjs6,Extjs,Extjs6,我正在尝试测试dataview的tpl中的combobox值: Ext.define('MyForm', { extend: 'Ext.form.Panel', items: [ { xtype: 'combo', name: 'my_combo', }, { xtype: 'dataview', tpl: new Ext.XTempla
Ext.define('MyForm', {
extend: 'Ext.form.Panel',
items: [
{
xtype: 'combo',
name: 'my_combo',
},
{
xtype: 'dataview',
tpl: new Ext.XTemplate(
'<tpl for=".">',
'<tpl if="this.test()">pass</tpl>',
'</tpl>'
,
{
test: function(){
//doesn't work
return this.getView().down('[name=my_combo]').getValue() == 'ok';
}
}),
}
]
});
Ext.define('MyForm'{
扩展:“Ext.form.Panel”,
项目:[
{
xtype:'组合',
名字:“我的组合”,
},
{
xtype:“数据视图”,
tpl:新Ext.XTemplate(
'',
“通过”,
''
,
{
测试:函数(){
//不起作用
返回这个.getView().down('[name=my_combo]')。getValue()=='ok';
}
}),
}
]
});
这不起作用,因为此引用的是模板本身,我不知道如何从内部访问视图。无法在XTemplate中访问视图。要实现这一点,您可以使用ViewModel,下面是它的代码 和工作森查小提琴 更新:我更新了使用DataView的代码,DataView有点棘手,我覆盖了prepareData方法,将额外的信息传递给模板,并在组合值更改时更新DataView。这里是最新变化的摆弄
Ext.define('MyApp.MyPanel'{
扩展:“Ext.Panel”,
xtype:'myForm',
默认值:{
填充:10
},
视图模型:{
商店:{
雇员商店:{
字段:['name'],
数据:[{
名字:“约翰”
}, {
名称:“坦普尔”
}, {
名字:“乔治”
}, {
姓名:“米琳达”
}]
},
}
},
项目:[
{
xtype:“组合框”,
fieldLabel:'名称',
名称:'nameField',
queryMode:'本地',
displayField:'名称',
valueField:'名称',
参考:“emp”,
绑定:{
存储:“{employeeStore}”,
值:“{name}”
}
},{
xtype:“数据视图”,
itemId:'雇员',
tpl:新Ext.XTemplate(
'',
'',
“{name}”,
'选定',
'',
''
),
itemSelector:'div.dataview-multisort-item',
绑定:{
存储:“{employeeStore}”
},
准备数据:功能(数据、索引、记录){
var name=this.up().getViewModel().get('name');
var passed=record.get('name')==name;
返回Ext.apply({passed:passed},data);
}
}
],
initComponent:function(){
this.callParent(参数);
var me=这个;
//更改名称时刷新数据视图。
this.getViewModel().bind('{name}',function(){
var dataview=me.down(“#empList”);
refresh();
});
}
});
不能在XTemplate函数中引用视图。使用ViewModel可能更好。如何使用bind
,从dataview模板中的ViewModel访问值?dataview与Store一起工作,但我们只处理一个值。那么,我可以知道为什么要对单个值使用DataView吗?我不是在处理单个值,我有这样一个DataView:,我需要检查DataView模板中的某些条件,该模板是基于另一个combobox值计算的。是的,这就是我试图避免的,将数据注入存储。哦,如果没有更好的办法。Thank.return Ext.apply({passed:passed},data);以防我们不想修改底层模型。
Ext.define('MyApp.MyPanel', {
extend: 'Ext.Panel',
xtype: 'myForm',
defaults: {
padding: 10
},
viewModel: {
stores: {
employeeStore: {
fields: ['name'],
data: [{
name: 'John'
}, {
name: 'Tempel'
}, {
name: 'George'
}, {
name: 'Milinda'
}]
},
}
},
items: [
{
xtype: 'combobox',
fieldLabel: 'Name',
name: 'nameField',
queryMode: 'local',
displayField: 'name',
valueField: 'name',
reference: 'emp',
bind: {
store: '{employeeStore}',
value: '{name}'
}
},{
xtype: 'dataview',
itemId: 'empList',
tpl: new Ext.XTemplate(
'<tpl for=".">',
'<div class="dataview-multisort-item">',
'<h3>{name}</h3>',
'<tpl if="passed">Selected</tpl>',
'</div>',
'</tpl>'
),
itemSelector: 'div.dataview-multisort-item',
bind: {
store: '{employeeStore}'
},
prepareData: function(data, index, record) {
var name = this.up().getViewModel().get('name');
var passed = record.get('name') == name;
return Ext.apply({passed: passed}, data);
}
}
],
initComponent: function() {
this.callParent(arguments);
var me = this;
// refresh the dataview when name is changed.
this.getViewModel().bind('{name}', function() {
var dataview = me.down('#empList');
dataview.refresh();
});
}
});