如何使用Sencha Touch 2在同一个动作中处理多个商店实例?

时间:2013-06-04 09:42:54

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

我编写了一个简单的应用程序,它在主页中显示了dataview.List文章。

这是我的主页视图:

enter image description here

我也可以点击它来打开一篇特定的文章,并在其他视图中有完整的描述。

这是我的特定文章的文章视图页面:

enter image description here

为此,我在ArticleController类中应用了一个过滤器(这里我得到了匹配的记录)。

onViewArticle: function(record) {
        var articleStore = Ext.getStore("ArticleStore");
        var selectedArticle = record;
        articleStore.filterBy(function(record, id) {
            if (selectedArticle.data.id == id)
                return (true);
            return (false);
        });
        Ext.Viewport.animateActiveItem(this.getArticleViewConnexContainer(), {
            type: "slide", direction: "left"
        });
    }, 

这是我的商店类:

Ext.define("MyApp.store.ArticleStore", {
    extend: "Ext.data.Store",
    requires: ["MyApp.model.ArticleModel"],
    config: {
    model: "MyApp.model.ArticleModel",
    proxy: {
        type: "ajax",
        api: {
            create: "http://localhost/MobileApplication/MyApp/services/ArticleService.php?action=create",
            read: "http://localhost/MobileApplication/MyApp/services/ArticleService.php?action=read",
            update: "http://localhost/MobileApplication/MyApp/services/ArticleService.php?action=update",
            destroy: "http://localhost/MobileApplication/MyApp/services/ArticleService.php?action=destroy"
        },
         extraParams: {
            keyword: ""
        },
        reader: {
            type: "json",
            rootProperty: "articles",
            totalProperty: "total"
        }
    },
        autoLoad: true
    }
});

但是现在,我想在同一个动作中应用另一个过滤器来列出文章描述正下方的其他文章(使用另一个特定的过滤器)。这涉及使用两个不同的过滤器,我认为(一个用于获取特定的文章(已在此处完成),另一个用于文章列表,我想在文章描述的下方)。但是我怎么能这样做呢?如果我在同一控制器功能中应用两个过滤器,则第二个过滤器将销毁阻止,因为所有存储数据都在缓存中。是否有可能的方式(例如在php MVC框架中)从控制器向视图发送变量并显示其内容(通过这种方式,我将有两个不同的变量,我将可以显示我的两个请求的内容我的看法)?或者也许是同时处理多家商店的可能方式?我真的输了。有人能帮帮我吗?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

其中有几个问题。

Sencha Framework的构建考虑了“一个商店 - 一个视图”的概念。因此,如果您有两个不同的视图来自真正的一个数据存储,那么您仍然需要拥有该存储的两个副本。如果您不需要同时显示这两个视图,则可以清除/应用过滤器(对于手机应用程序来说,这种情况最常见),但我建议您有两个单独的副本。

就你的情况而言 - 我认为你不需要那样。当您显示特定书籍时,您不需要过滤商店。您只需加载一条记录(store.getAt()),然后在您的子表单中使用此记录。