List-View通过JSON读取,没有键

时间:2013-07-19 13:08:03

标签: extjs sencha-touch-2 sencha-architect

我正在使用Sencha Architect进行测试。 我添加了一个列表视图,与商店连接,与模型连接。 存储配置为加载以下JSON数据:

{
    "data": {
        "blacklist":[
            "word 1",
            "word 2",
            "word 2"
        ]
    }
}

每个“单词x”都应列在我的列表视图中的列表项

现在我想建立我的模型。但是模型确实需要“字段名称”,在我的情况下不存在。

如果我使用以下JSON数据:

{
    "data": {
        "blacklist":[
            {"name": "word 1"},
            {"name": "word 2"},
            {"name": "word 3"}
        ]
    }
}

给我的模型一个名为“name”的字段,一切正常。

但是,如果我的JSON值没有在模型中定义的键(作为字段/字段名),我该如何设置这个场景呢?

1 个答案:

答案 0 :(得分:1)

如果您不确切知道自己想要对结果做什么,您就可以修改此代码以获得所需内容。

App.js

Ext.Loader.setConfig({
    enabled : true
});


Ext.application({
    name : ('SF' || 'SenchaFiddle'),

    models : ['TestModel'],

    stores : ['TestData'],

    launch : function() {
        Ext.create('Ext.dataview.List', {
            fullscreen : true,

            model : 'TestModel',

            store : 'TestData',

            itemTpl : "{blacklist}"
        });
    }
});

型号:

Ext.define('SF.model.TestModel', {
    extend : 'Ext.data.Model',

    config : {
        fields : [{
            name : 'blacklist',
            type : 'string',

            // **This is where you will parse out the values of 'blacklist'**

            convert : function(value, record) {
                console.log("value: ", value.length);
                console.log("Record: ", record);

                var returnArr = [];
                if (value && value.length > 0) {
                    for (var i=0; i<value.length; i++) {
                        returnArr[i] = value[i];
                    }

                    return returnArr;
                };

                return "Could not Convert";
            }
        }]
    }
});

商店:

Ext.define('SF.store.TestData', {
    extend : 'Ext.data.Store',

    config : {
        model : 'SF.model.TestModel',

        data : [{
            "blacklist":[
                "word 1",
                "word 2",
                "word 2"
            ]
        }],
    }
});

如果我遗漏了问题,请告诉我,

祝你好运,布拉德