如何从异常的JSON商店创建Ext.data.Store? [英] How to create Ext.data.Store from an unusual JSON store?

查看:111
本文介绍了如何从异常的JSON商店创建Ext.data.Store?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个JSON存储,但它没有正确编码。什么是正确的语法?

  Ext.define('MA.store.Language',{
extends :'Ext.data.Store',
fields:[{
name:'id'
},{
name:'name'
}],
数据:[{
aa:Afar,
ab:阿布哈兹,
ace:Achinese,
ach :Acoli,
ada:Adangme,
ady:Adyghe,
ae:Avestan,
af南非荷兰语
afa:非洲亚洲语言,
afh:Afrihili,
ain:Ainu,
ak Akan
}]
});

我需要这个商店这样的组合框,但它不会工作:

  {
xtype:'combo',
name:'language',
fieldLabel:'Language',
store:'Language',
queryMode:'local',
displayField:'name',
valueField:'id',
typeAhead:true,
forceSelection:true
}


解决方案

无论如何使用您的异常JSON。在这种情况下,您可以通过定义自己的读者来解决您的问题。像这样:

  Ext.define('MA.reader.Language',{
extends:'Ext.data .reader.Json',
alias:'reader.Language',
read:function(response){
var data = [];
for(var i in response [ 0])
data.push({
id:i,
'name':response [0] [i]
});
return this.callParent ([data]);
}
});

Ext.define('MA.store.Language',{
extends:'Ext.data.Store',
fields:[{
name:' id'
},{
name:'name'
}],
data:[{
aa:Afar,
ab:阿布哈兹,
ace:Achinese,
ach:Acoli,
ada:Adangme,
ady :Adyghe,
ae:Avestan,
af:南非荷兰语,
afa:非洲亚洲语言,
afh :Afrihili,
ain:Ainu,
ak:Akan

}],
proxy:{
类型:'记忆',
阅读器:{
类型:'语言'
}
}
});

var store = Ext.create('MA.store.Language',{
storeId:'Language'
});

var cc = Ext.widget('combo',{
xtype:'combo',
name:'language',
fieldLabel:'Language'
store:'Language',
queryMode:'local',
displayField:'name',
valueField:'id',
typeAhead:true,
forceSelection:true
});

cc.render(Ext.getBody());

编辑:工作示例


I have this JSON store but it`s not coded correctly. What is the correct syntax for it?

Ext.define('MA.store.Language', {
extend : 'Ext.data.Store',
fields : [ {
    name : 'id'
}, {
    name : 'name'
} ],
data : [ {
    "aa" : "Afar",
    "ab" : "Abkhazian",
    "ace" : "Achinese",
    "ach" : "Acoli",
    "ada" : "Adangme",
    "ady" : "Adyghe",
    "ae" : "Avestan",
    "af" : "Afrikaans",
    "afa" : "Afro-Asiatic Language",
    "afh" : "Afrihili",
    "ain" : "Ainu",
    "ak" : "Akan"
} ]
});

I need this store for a combobox like this but it wont work:

{
xtype : 'combo',
name : 'language',
fieldLabel : 'Language',
store : 'Language',
queryMode : 'local',
displayField : 'name',
valueField : 'id',
typeAhead : true,
forceSelection : true
}

解决方案

So you want to use your unusual JSON anyway. In this case you can solve your problem by defining your own reader. Like this:

Ext.define('MA.reader.Language', {
    extend: 'Ext.data.reader.Json',
    alias: 'reader.Language',
    read: function (response) {
        var data = [];
        for (var i in response[0])
            data.push({
                id: i,
                'name': response[0][i]
            });
        return this.callParent([data]);
    }
});

Ext.define('MA.store.Language', {
    extend: 'Ext.data.Store',
    fields: [{
        name: 'id'
    }, {
        name: 'name'
    }],
    data: [{
        "aa": "Afar",
        "ab": "Abkhazian",
        "ace": "Achinese",
        "ach": "Acoli",
        "ada": "Adangme",
        "ady": "Adyghe",
        "ae": "Avestan",
        "af": "Afrikaans",
        "afa": "Afro-Asiatic Language",
        "afh": "Afrihili",
        "ain": "Ainu",
        "ak": "Akan"

    }],
    proxy: {
        type: 'memory',
        reader: {
            type: 'Language'
        }
    }
});

var store = Ext.create('MA.store.Language', {
    storeId: 'Language'
});

var cc = Ext.widget('combo', {
    xtype: 'combo',
    name: 'language',
    fieldLabel: 'Language',
    store: 'Language',
    queryMode: 'local',
    displayField: 'name',
    valueField: 'id',
    typeAhead: true,
    forceSelection: true
});

cc.render(Ext.getBody());

EDIT: working example

这篇关于如何从异常的JSON商店创建Ext.data.Store?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆