【问题标题】:How to display data in Label from data store in Sencha Touch如何在 Sencha Touch 的数据存储中的 Label 中显示数据
【发布时间】:2011-05-26 10:45:53
【问题描述】:

我想显示从数据存储接收到的数据。我尝试过的一种方法是使用文本字段使其禁用,然后使用存储数据设置其值。 但我认为这不是正确的解决方案,所以我尝试使用标签,但我不知道它是如何完成的。你们能指出我正确的做法吗?任何帮助表示赞赏。

谢谢, Mehul Makwana。

【问题讨论】:

    标签: sencha-touch labelfield extjs-mvc


    【解决方案1】:

    这篇文章有点老了,但我正在研究同一主题并最终使用了不同的方法。

    我正在使用 Sencha Touch v2.0。我创建标签并将其放在 form.Panel 中,就像通常做的那样。然后我在设计器中配置标签 tpl 以包含模型字段。在将值应用到窗体面板时,我还调用标签 tpl 上的 apply() 方法。以下工作示例说明了这一点。

    app.js:

    Ext.Loader.setConfig({
      enabled: true
    });
    
    Ext.application({
      views: [
        'MyFormPanel'
      ],
      name: 'MyApp',
    
      launch: function() {
    
        Ext.create('MyApp.view.MyFormPanel', {fullscreen: true});
      } 
    
    });
    

    view.MyFormPanel.js

    Ext.define('MyApp.view.MyFormPanel', {
        extend: 'Ext.form.Panel',
        alias: 'widget.myformpanel',
    
        config: {
        items: [
            {
            xtype: 'label',
            itemId: 'myLabel',
            tpl: [
                'Hello, {firstName} {lastName}, please change your email below:',
                ''
            ]
            },
            {
            xtype: 'textfield',
            label: 'Email:'
            }
        ],
        listeners: [
            {
            fn: 'onFormpanelInitialize',
            event: 'initialize'
            }
        ]
        },
    
        onFormpanelInitialize: function(component, options) {
        var person = Ext.decode("{firstName: 'John',lastName: 'Dow',email: 'jd@somewhere.com'}");
        // apply value to the form
        this.setValues(person);
        // get the updated text for the label
        var label = this.down('#myLabel');
        var html = label.getTpl().apply(person);
        label.setHtml(html);
    
        }
    
    });
    

    所以思路是将标签模板保存在label.tpl字段中,然后使用Template的apply()方法获取运行时标签值,然后给它设置标签文本。

    【讨论】:

      【解决方案2】:

      我最近尝试通过创建一个“标签”表单组件来解决这个问题。我在Sencha/PhoneGap 上写的一篇博客文章中发布了它。代码如下:

      Ext.form.LabelField = function(config){
          Ext.form.LabelField.superclass.constructor.call(this, config);
      };
      
      Ext.extend(Ext.form.LabelField, Ext.form.Field,  {
          isField: true,
          value: '',
          renderSelectors: {fieldEl: '.x-form-labelfield'},
          renderTpl: [
             '<tpl if="label">',
                 '<div class="x-form-label"><span>{label}</span></div>',
             '</tpl>',
             '<div class="x-form-label x-form-labelfield" style="width:70%; text-align:right"><span>{value}</span></div>',
          ],
          setValue:function(val) {
              this.value = val;
              if(this.rendered){
                   this.fieldEl.update('<span>' + val + '</span>');
              }
              return this;
          },
      
      });
      
      Ext.reg('labelfield', Ext.form.LabelField);
      

      让我知道这是否有效。

      【讨论】:

      • 太棒了。如果您能帮助我更多,我如何将值与存储数据绑定。 ?
      • 它应该像一个常规字段一样,您需要向它添加 name 属性并使用来自对象的数据创建 FormPanel。我最终以不同的方式使用它,因此您可能需要进行试验。
      【解决方案3】:

      谢谢你的错误。这正是我想要的。我建议删除 x-form-label 类并使用这些样式:

      .x-form-labelfield {
        -webkit-box-flex: 1;
        box-flex: 1;
        width: 100%;
        position: relative;
        -webkit-border-radius: 0;
        border-radius: 0;
        padding: .4em;
        border: 0;
        min-height: 2.5em;
        display: block;
        background: white none;
        -webkit-appearance: none;
      }
      

      【讨论】:

      • 有什么具体的原因要改变风格。 ?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      相关资源
      最近更新 更多