煎茶触控 1.1。我需要从 Array Javascript 变量而不是代理填充 Ext.List 对象
Posted
技术标签:
【中文标题】煎茶触控 1.1。我需要从 Array Javascript 变量而不是代理填充 Ext.List 对象【英文标题】:Sencha Touch 1.1. I need to populate a Ext.List Object from an Array Javascript variable, instead of a Proxy 【发布时间】:2012-03-15 15:41:26 【问题描述】:我正在使用 sencha touch 1.1,特别是使用 Ext.List。但不是使用代理来填充 Ext.List 对象,我需要直接从数组 javascript 变量中加载数据,例如
var = [["1","Ángel Quezada"],["2","Christian Herrera"],["3","Francisco Quispe"]]
我以代理方式填充 Ext.List 没有任何问题,首先我声明 le 模型,然后是代理,最后是 List。根据下一行。
Ext.regModel('Cronograma',
idProperty: 'nrocuota',
fields: [name:'nrocuota', type: 'string']
);
Ext.regStore('CronogramaStore',
model: 'Cronograma',
proxy:
type :'ajax',
url: '/mSAS/cotizacion.do?method=generarCronograma',
reader: type:'array'
);
this.grdCronograma = new Ext.List(
id: 'notesList',
store: 'CronogramaStore',
emptyText: 'No existe resultado ',
itemTpl: 'nrocuota',
listeners: 'render':function(thisComponent)
);
但我知道我还有另一个需要。我需要从数组 Javascript 变量中填充列表,而不是使用代理,我的意思是
如何使用
var varArray = [["1","Ángel Quezada"],["2","Christian Herrera"],["3","Francisco Quispe"]]
要填充 Ext.List,我想有一种方法可以使用 Ext.data.Store 及其加载方法。但我找不到。
【问题讨论】:
【参考方案1】:这是动态的方式,不使用静态数据。
Ext.regModel('Cronograma',
idProperty: 'nrocuota',
fields: [name:'nrocuota', type: 'string']
);
Ext.regStore('CronogramaStore',
model: 'Cronograma'/*,
data : [
nrocuota : 'Ángel Quezada' ,
nrocuota : 'Christian Herrera' ,
nrocuota : 'Francisco Quispe' ] */ // Does not take array [[],[],[]] that was specified in problem statement
);
this.grdCronograma = new Ext.List(
id: 'notesList',
store: 'CronogramaStore',
emptyText: 'No existe resultado ',
itemTpl: 'nrocuota',
listeners: 'render':function(thisComponent)
);
//这里是动态方法。
function addToList(data)
var len = data.length;
for(var i=0;i<len;i++)
var note = Ext.ModelMgr.create(
nrocuota: data[i][1], //grab only name from the array
, 'Cronograma');
CronogramaStore.add(note);
CronogramaStore.sync();
//现在只调用函数
var data = [["1","Ángel Quezada"],["2","Christian Herrera"],["3","Francisco Quispe"]];
addToList(data);
【讨论】:
迭代数据并创建记录并手动将其添加到存储不是一个好习惯,您应该使用 store.loadData(data) 方法,因此存储会自动执行您在此处手动执行的操作 为什么这不是一个好习惯,如何使用 store.loaddata 在某个索引处插入数据。另外,如果你去 sencha-touch.js,store.loaddata 做同样的事情。为什么 sencha 框架本身使用这种“不是一个好的做法”。 因为如果库在某些方法中做同样的事情,为什么你需要重新发明***,那么为什么不使用它而不是创建我们自己的逻辑,并且在存储填充后插入数据我们可以使用add 或 insert 方法,但用户表示他已经拥有数组数据,那么为什么只使用一个函数调用就可以实现相同的代码 10 行,并且用户询问在某个索引处插入数据? 用户绝对不会通过告诉我在回答您的“不良做法评论”来要求在某个索引处插入,而且创建模型(作为原始模型)将比使用 loaddata 更有效。所以不使用loaddata的原因是“效率”。如何回答使用 modelmgr 是一种不好的做法? 让我们不要深入讨论偏离用户答案的问题,让用户决定做什么:)【参考方案2】: Ext.regModel('Cronograma',
idProperty: 'nrocuota',
fields: [name:'nrocuota', type: 'string']
);
Ext.regStore('CronogramaStore',
model: 'Cronograma',
data : [
nrocuota : 'Ángel Quezada' ,
nrocuota : 'Christian Herrera' ,
nrocuota : 'Francisco Quispe'
]
);
this.grdCronograma = new Ext.List(
id: 'notesList',
store: 'CronogramaStore',
emptyText: 'No existe resultado ',
itemTpl: 'nrocuota',
listeners: 'render':function(thisComponent)
);
更新为使用数组而不是 json 对象:
Ext.regModel('Cronograma',
idProperty: 'id',
fields: [ 'id', 'nrocuota' ]
);
var data = [["1","Ángel Quezada"],["2","Christian Herrera"],["3","Francisco Quispe"]];
Ext.regStore('CronogramaStore',
model: 'Cronograma',
data : data
);
this.grdCronograma = new Ext.List(
id: 'notesList',
store: 'CronogramaStore',
emptyText: 'No existe resultado ',
itemTpl: 'nrocuota',
listeners: 'render':function(thisComponent)
);
或者如果您在创建商店时没有可用数据,则使用store.loadData(data);
函数
我自己没有测试过这段代码,所以如果它不起作用,请告诉我
【讨论】:
即静态方法,问题严格要求使用数组。 他没有指定数据在创建时是否可用,如果可用,那么在我的方法中他只需要在数据配置中传递数组,他从未说过他想要创建一个空商店,然后填充项目:) "我需要直接从数组 javascript 变量中加载数据,例如 var = [["1","Ángel Quezada"],["2","Christian Herrera"],[" 3","Francisco Quispe"]]" 这是问题陈述,我没有看到要从数组加载的数据。请参阅***.uservoice.com/forums/1722-general/suggestions/… 在答案下被否决的答案没有解决问题。如果您的解决方案适用于数组 [[],[],[]] 而不是 [,,],我会很高兴。以上是关于煎茶触控 1.1。我需要从 Array Javascript 变量而不是代理填充 Ext.List 对象的主要内容,如果未能解决你的问题,请参考以下文章