我在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
仍然是最好的方法吗?
答案 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()
方法可能就是您所需要的。