如何在 Sencha Touch 2 中选择性地填充 Store

Posted

技术标签:

【中文标题】如何在 Sencha Touch 2 中选择性地填充 Store【英文标题】:How to selectively populate a Store in Sencha Touch 2 【发布时间】:2015-06-30 21:32:13 【问题描述】:

我的 Sencha Touch 2.4.1 应用程序中有以下商店:

Ext.define('NativeApp.store.Item', 
    extend: 'Ext.data.Store',
    config: 
        model: 'NativeApp.model.Item',
        storeId: 'item-store',
        fields: ['id', 'description'],
        proxy: 
            type: 'ajax',
            url: 'resources/json/item.json',
            reader: 
                type: 'json',
                rootProperty: 'items'
            
        ,
        autoLoad: true
       
);

它填充了 JSON 文件中的所有内容,假设如下所示:


    "items": [
        
            "id": 's1',
            'description': 'desc'
        ,
        
            "id": 's2',
            'description': 'desc'
        
    ]   

假设在我看来我有两个按钮,“s1”和“s2”。 如果我点击“s1”,我会被带到一个页面,其中包含一个包含 ID 为“s1”的数据的列表。 (在这种情况下,只有一个,但可能还有更多)。

这将如何实现?

想法 1:autoload 属性可以设置为对象。来自here - “如果 autoLoad 的值是一个 Object,这个 Object 将被传递给 store 的 load() 方法。”

因此,如果在我的控制器中,在点击按钮时执行的处理程序中,我可以生成这个对象(解析 JSON 文件)并以某种方式将其传递给存储 - 任务完成。有点像。

除了如何将数据传递给 store 的问题外,最直接的问题是数据何时加载到 store 中?

根据docs,“这个商店的加载方法是在创建后自动调用的”。是在应用程序启动时创建,还是在我创建使用商店的视图对象时创建: var view = xtype: 'myview';

想法 2: 也许我可以从代理中动态切换出url,并为每个id 设置单独的JSON 文件(不会太多)。但这似乎不太可能奏效。

想法 3:data 对象从该控制器传递到存储(再次解析 JSON)。

这些是否可行?如果没有,还有什么替代解决方案?也许我想多了。

编辑: 我有一个项目列表,每个项目都有一个子项目列表。所以当我选择一个项目时,我想被带到子项目的页面。现在,所有这些子项都在一个 JSON 文件中,所以在单击一个项后,我需要一种方法告诉商店只加载部分 json 数据。

Ext.data.model.load 仍然是最好的方法吗?

【问题讨论】:

【参考方案1】:

想法 1: 是的,你可以这样做......可能比IMO更值得。商店将在创建后立即加载——因此,如果您在应用程序启动时创建商店,那么它将在随后加载。如果您在运行时随机创建一个商店,它就会加载。如果 store 是为视图内联定义的,它会在视图创建时加载。

想法 2: 可以说是一个更好的解决方案,但是将 URL 换成代理,然后强制加载,解析数据等仍然很麻烦。

根据您的观点,您可以使用NativeApp.model.Item.load(id) 直接加载单个模型的数据(请参阅docs)。这假设您为此设置了 API,但它更容易 IMO,当然也更 RESTful。

想法 3: 嗯。对我来说,这听起来真的像 Ext.data.Store 是你想要完成的错误的构造。


你的任何想法可行吗?是的。

你是不是想太多了? 有点,但话说回来,如果你不这样做,你就不会成为一名程序员

如果不查看您的应用程序的其余部分并了解您正在执行 X、Y 或 Z 的为什么,很难确切地告诉您我会做什么......但如果您是只计划在给定的“详细信息”屏幕上显示单个模型的数据(并且您需要按需加载该数据),那么静态 Ext.data.Model.load() 方法可能就是您所需要的。

【讨论】:

我已编辑我的问题以更准确地描述我的情况。

以上是关于如何在 Sencha Touch 2 中选择性地填充 Store的主要内容,如果未能解决你的问题,请参考以下文章

如何在sencha touch 2中获取地图(Ext.map)的中心坐标?

Sencha Touch - 如何将各种图标(每个项目一个)集成到选择字段中?

Sencha touch 2.0:将“空”选择添加到选择字段

如何在 Sencha Touch 2 模型中存储日期

Sencha Touch 2 - 选择一张照片

记住 selectfield sencha touch