如何在Sencha Touch 2

时间:2015-06-30 21:32:13

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

我在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属性可以设置为Object。从here - "如果autoLoad的值是Object,则此Object将传递给商店的load()方法。"

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

除了如何将其传递到商店的问题外,当前的问题是数据何时被加载到商店?

根据docs,"此商店的加载方法在创建后自动调用"。是在应用程序启动时创建,还是在创建使用存储的视图对象时: var view = {xtype: 'myview'};

创意2:
也许我可以从代理中动态切换url并为每个id分别设置JSON文件(不会太多)。但这似乎不太可行。

创意3:
data对象传入该存储区(再次解析JSON)。

这些都可行吗?如果没有,那么另一种解决方案是什么?
也许我会过度思考这个问题。

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

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

1 个答案:

答案 0 :(得分:1)

创意1 : 是的,你可以这样做......可能比值得IMO更麻烦。商店将在创建后立即加载 - 因此,如果您在应用程序启动时创建商店,则会加载它。如果在运行时期间随机创建商店,则会加载它。如果商店是为视图内联定义的,则在创建视图时加载它。

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

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

创意3 : 咩。对我来说听起来像Ext.data.Store是你想要完成的错误构造。

您的任何想法是否可行?是。

你是不是在想这个?稍微,但如果你不这样做,你就不会再成为程序员了。

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