Sencha Touch 2:同一个 Store 中的两个 REST 请求

Posted

技术标签:

【中文标题】Sencha Touch 2:同一个 Store 中的两个 REST 请求【英文标题】:Sencha Touch 2: Two REST request in the same Store 【发布时间】:2015-01-11 11:51:54 【问题描述】:

是否可以在同一个商店中以某种方式包含多个 rest/json 请求?

例如,我有这个返回 json 对象的 api:

http://api1.domain.com

"name":"john","name:"harry"

http://api2.domain.com

"name":"peter","name:"fred"

我想将 api1 和 api2 的结果合并到一个存储中,以便在一个视图中处理所有连接。结果:

"name":"john","name:"harry","name":"peter","name:"fred"

或者可能没有连接,但我可以在一个视图中同时调用这两个 api: 约翰 哈利 彼得 弗雷德

这可能吗?

我正在尝试这个没有成功:

Ext.application(
    name: 'sencha',
    views: ['Main1'],
    models:['AdModel'],
    stores:['AdStore1','AdStore2'],
    launch: function () 

    var store1Obj = Ext.getStore('AdStore1');
    var store2Obj = Ext.getStore('AdStore2');

    store1Obj.each(function(record)
        var copiedRecord = record.copy();
    store2Obj.add(copiedRecord);
    );

    Ext.create('Ext.DataView', 
        fullscreen: true,
        store: store2Obj,
        itemTpl: '<tpl for="."><div><strong>name</strong></div></tpl>'
        );
    

);

【问题讨论】:

【参考方案1】:

首先,您对store http://docs-origin.sencha.com/touch/2.4/2.4.1-apidocs/#!/api/Ext.data.Store-method-each 的each 方法使用了错误的语法

那么在同一个 store 中添加 2 个不同的数据源就很简单了。

Ext.application(
    name: 'Fiddle',

    launch: function() 

        // Set up a model to use in our Store
        Ext.define("User", 
            extend: "Ext.data.Model",
            config: 
                fields: [
                    name: "name",
                    type: "string"
                ]
            
        );

        // Setup the stores
        var myStore1 = Ext.create("Ext.data.Store", 
            model: "User",
            data: [
                "name": "john"
            , 
                "name": "harry"
            ],
            autoLoad: true
        );

        var myStore2 = Ext.create("Ext.data.Store", 
            model: "User",
            data: [
                "name": "peter"
            , 
                "name": "fred"
            ],
            autoLoad: true
        );

        // Loop through each record of store2 adding it to store1
        myStore2.each(function(item, index, length) 
            myStore1.add(item);
        );

        Ext.create("Ext.List", 
            fullscreen: true,
            store: myStore1,
            itemTpl: "name"
        );
    
);

演示:https://fiddle.sencha.com/#fiddle/g6n

【讨论】:

以上是关于Sencha Touch 2:同一个 Store 中的两个 REST 请求的主要内容,如果未能解决你的问题,请参考以下文章

使用 store sencha touch 2 将数据加载到 List

如何在 Sencha Touch 2 proxy/model/store/whatever 上设置 CRUD 方法?

使用 store Sencha Touch 2 将数据加载到列表中并且不出现

从 Sencha Touch 中的 Store 获取特定价值?

sencha touch store 中的隐式 load()

在 Sencha Touch/ExtJS 中不使用 store 删除列表项