Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从dataview';ExtJS6中的第三方语言是什么?_Extjs_Extjs6 - Fatal编程技术网

如何从dataview';ExtJS6中的第三方语言是什么?

如何从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

我正在尝试测试dataview的tpl中的combobox值:

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();
        });
    }
});