2010-11-03 105 views
2

我正在使用Sencha Touch制作网络移动应用程序。我对EXTJS的工作方式并不十分熟悉。我建立了我的名单如下:加载后在Sencha Touch中更新列表项目

sink.Structure = [{ 
     text: 'Name' 
    }, 
    { 
     text: '&nbsp;&nbsp;&nbsp;<?php echo $name; ?>' 
    }, 
    { 
     text: 'Friend' 
    }, 
    { 
     text: '&nbsp;&nbsp;&nbsp;<?php echo $friend; ?>' 
    }, 
    { 
     text: 'Shop' 
    }, 
    { 
     text: '&nbsp;&nbsp;&nbsp;<?php echo $shop; ?>' 
    }]; 

      Ext.regModel('Demo', { 
      fields: [ 
       {name: 'text',  type: 'string'}, 
       {name: 'source',  type: 'string'}, 
       {name: 'preventHide', type: 'boolean'}, 
       {name: 'animation'}, 
       {name: 'card'} 
      ] 
     }); 

     sink.StructureStore = new Ext.data.TreeStore({ 
      model: 'Demo', 
      root: { 
       items: sink.Structure 
      }, 
      proxy: { 
       type: 'ajax', 
       reader: { 
        type: 'tree', 
        root: 'items' 
       } 
      } 
     }); 

所以这个完美呈现列表,正是我想要的,但我怎么改变这种回声$名称的行的价值;

在初始加载时,我有一个PHP变量的值,但如果用户改变它,我希望它改变这个值。我需要重写整个结构吗?

在jquery中我可以给元素一个ID然后修改它的.html内容。但我注意到,这种结构的方式我的列表项没有任何标识选择器,我可以用它来引用它。任何建议都会有所帮助,谢谢!

更新:所以我在这方面取得了一些进展,而不是在列表结构中回显PHP变量,我打印了一个名为name的Javascript变量,它最初设置为PHP变量。我也把sink.Structure设置在一个函数中,它接受这些值,然后应该重置它们,但它不会。我已经尝试使函数包括sink.StructureStore,因为它似乎是什么渲染列表(也许?这是一个猜测),也只是sink.Structure数组列表,但似乎没有影响已设置的列表, 请帮忙!

+2

无关的一面注意:您应该使用''<?php echo addslashes($ shop); ?>''等,以避免字符串包含单引号时发生破损。 – Tomalak 2010-11-03 20:14:53

+0

好点谢谢 – 2010-11-03 20:31:19

回答

-6

我不得不说我对Sencha Touch在这方面的工作方式感到失望,它看起来列表首先被渲染并且不能被重新渲染,因为它动态地创建了所有div的一类“x -项目清单。”我尝试了很多方法来试图摆脱列表并重新创建一个新的,但无济于事。

我设法实现这个功能的唯一方法是在ID列表元素中放入一个div标签,然后使用JQuery选择元素并修改它的html。这是我用Sencha Touch制作的第一款应用程序,我希望它是最后一个。

我们之所以这样做的唯一原因是因为它与Android的兼容性,但在Android模拟器(2.2)上加载应用程序,无论如何都没有任何页面动画动画工作!另外,在Nexus One上进行了测试,它的加载速度更快,但幻灯片切换不存在。尽管Sencha还有其他几项功能,但当涉及到网络移动应用程序时,JQTouch肯定是我的首选。对不起,只好把我的胸部弄掉:)

+0

这是错误的做法。正确答案如下。默认情况下,Android上的动画是禁用的,如果您愿意,可以启用它们,但在Android上翻译性能较差,因此请自担风险。 – 2010-11-06 19:12:09

+0

我仍然不得不使用jQuery的“html()”功能来更改列表中的值。我还没有看到任何可以做到的代码,但jQuery现在是一个解决方法。 – 2012-10-22 15:57:50

2

列表是数据绑定的。更新底层数据存储中的数据,并且绑定到数据存储的任何列表将自动更新其用户界面。

+1

这是正确的答案,无视皮特的'接受'答案。 – 2011-04-10 14:27:50

+0

这并没有解决任何问题......谢谢你的信息! – 2011-06-29 22:41:47

+0

但你的回答实际上是不正确的,我想你错过了这一点。 – 2012-10-22 14:34:43

-2
  1. 您必须用新值更新您的Data.Store。
  2. YourList.bindStore(YourStore);
  3. 第二行代码自动填充列表。
相关问题