煎茶触控 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 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何创建煎茶触控应用程序的 APK 文件?

煎茶触控本地化

压缩煎茶触控 App

煎茶触控面板变暗

面板的煎茶触控列表

Parse.com煎茶触控2.0