如何在 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 - 如何将各种图标(每个项目一个)集成到选择字段中?