在Sencha Touch 2中动态定义和加载带有不同代理存储的视图
Dynamically define and load views with different proxy store in Sencha Touch 2
我正在用Sencha Touch 2创建一个移动应用程序,它将根据来自服务器的Json响应动态加载其视图。
这意味着在加载视图之前,我必须用一些通用元素组合视图。例如,如果我从服务器接收到与List视图相对应的Json字符串,我将不得不动态地用store和proxy填充列表项(name, url, description )。
这是可行的,但是我想在列表中选择一些项目并加载另一个列表,但是这次我想更改代理。我的新代理是来自所选项目的url字段。我从选定的项目中获得url字段并更改代理,但这引入了一个问题:
我使用的是Ext.navigation。查看,我想维护导航历史记录。在上面的例子中,如果我回到导航历史记录,第一个列表中的项目会变成最后一个列表中的项目。
我正在寻找某种工作流程来实现视图的动态加载,依赖于每个视图的独立数据,并始终维护MVC-Store模式和导航历史。
这是列表项的模型:
Ext.define('ExampleApp.model.ListItem', {
extend: 'Ext.data.Model',
config: {
fields: ['name', 'url', 'descriprion']
}
}
这是List的存储:
Ext.define('ExampleApp.store.ListItems', {
extend: 'Ext.data.Store',
config: {
autoLoad: false,
model: 'ExampleApp.model.ListItem',
proxy: {
type: 'jsonp'
url: 'http://mydomain.com/myjsonresponse',
reader: {
type: 'json',
useSimpleAccessors: true
}
}
}
})
这是我的观点:
Ext.define('ExampleApp.view.MyList', {
extend: 'Ext.List',
xtype: 'mylist',
requires: ['ExampleApp.store.ListItems'],
config: {
title: 'My List',
itemTpl: '{name} - {description}',
store: 'ListItems'
}
})
这是在我的列表的itemtap事件上调用的函数:
listItemTapped: function (view, index, target, record, event) {
var listItems = Ext.getStore('ListItems');
listItems.getProxy().setUrl(record.get('url'));
listItems.load();
this.getMain().push({
xtype: mylist
});
}
您可以尝试为每个列表创建单独的存储,而不是重用现有的存储。
listItemTapped: function (view, index, target, record, event) {
var listItems = Ext.create('ExampleApp.store.ListItems', {newUrl : record.get('url')});
listItems.load();
this.getMain().push({
xtype: mylist,
store: listItems
});
}
并添加初始化函数以使用newUrl:
Ext.define('ExampleApp.store.ListItems', {
extend: 'Ext.data.Store',
config: {
autoLoad: false,
newUrl : null,
model: 'ExampleApp.model.ListItem'
},
initialize : function() {
this.setProxy({
type: 'jsonp'
url: this.config.newUrl,
reader: {
type: 'json',
useSimpleAccessors: true
}
});
}
})
你可能想要销毁这些商店一旦他们的视图弹出。
@ThinkFloyd同意我们需要在离开视图时销毁存储,因为当应用程序有许多视图和具有大量数据的较大存储时,它将在稍后产生问题。我最近也遇到了同样的问题,这对我帮助很大。谢谢
相关文章:
- 将作用域存储在JSON中
- 在不打开聊天屏幕的情况下制作Zopim-ding代理
- 使用javascript存储变量的最安全方式
- 由于本地存储代理,Extjs网格面板最多显示25行.如何更改此限制值
- ExtJS——更改代理URL然后加载存储不会更新网格
- 我可以在 ExtJS4 中将带有 Rest 代理的存储转换为使用内存代理的存储吗?
- 将 json 数据存储在代理模式内的变量中
- 存储具有服务器代理时未触发Beforeload事件
- 如果代理遇到异常,ExtJS 4.0将取消存储加载
- 如何覆盖Sencha Touch数据存储代理异常侦听器
- 使用crud存储代理api中的Extjs变量
- 如何在ExtJS存储代理中更改extraParams的分隔符?
- 将数据绑定到ExtJS中存储的rest代理中查看
- 我应该在模型或存储中指定代理吗?
- Extjs数据模型/存储是否支持任何包装代理构建器方法?
- 在Sencha Touch 2中动态定义和加载带有不同代理存储的视图
- 如何在列表中使用内联存储声明本地存储代理
- 进程 extjs 在收到数据后存储代理数据
- ExtJS - DWR代理json存储
- 如何为模型和存储提供不同的代理配置