是否可以将EXT组件插入到XTemplate中?

问题描述:

我有一个XTemplate,我想在模板中添加一些实际的EXT小部件,这样我就可以在小部件上下呈现模板代码。比方说,我有一个“数据视图”具有以下itemTpl定义:是否可以将EXT组件插入到XTemplate中?

itemTpl: [ 
     '<tpl for=".">', 
     '<div class="song-page-header">', 
     ' <div class="artwork"><img src="{artwork}"/></div>', 
     ' <h1>{title}</h1>', 
     ' <h2>{artist}</h2>', 
     ' <h3>Genre: {genre}</h3>', 
     ' <p>{copyright}</p>', 
     '</div>', 

     /* Ext.Button should go here */ 

     '<tpl for="offers">', 
     ' <p>{offer_id}: {offer_type}, {price}</p>', 
     '</tpl>', 
     '</tpl>' 
    ] 

是否有可能定义一个真正的Ext.Button那里(而不是只是一些HTML近似于Ext.Button的行为)?我不在乎它是否必须在事实之后被应用,但我似乎无法找到正确的事件处理程序来使用它来插入按钮。 Sencha文件很糟糕,所以任何帮助都会更好。

我认为由于Sencha Touch框架的管理和性能,XTemplate不支持此功能。

其次,你不能这样做,因为基本上你试图在你的itemTpl里面的HTML和JavaScript之间合并时,sencha模板只允许html结构。

为了解决这种情况下,你可以看看Component Dataview

其实你可以做到这一点,你只需要一点点创意。这里

看看我的博客文章:http://jakes-hackerblog.herokuapp.com/blog/2013/05/23/a-fresh-rails-blog/

从本质上讲,你把一些动态的div元素在你的模板

   '<div id="box-holder">' + 
        '<div id="box-{schoolpersonid}"></div>'+ 
       '</div>'+ 

然后你用你的按钮配置中的使用“renderTo”,称这是在刷新功能:

listeners: { 

     'refresh': function(records) { 

      var storeRecords = records._store._data.items; 

      for(var i = 0; i < storeRecords.length; i++){ 

       var data = storeRecords[i].data; 
       var renderTo = this.element.select('#box-' + data.schoolpersonid).elements[0]; 

       var button1 = new Ext.Button({ 
        action:    'doPresent', 
        xtype:    'button', 
        align:    'right', 
        text:    'Present', 
        ui:     'present', 
        renderTo:   renderTo, 
        schoolpersonid:  data.schoolpersonid 
       }); 
      } 
     } 
    }, 
+0

嗨,我尝试你的代码。但我保持错误“未定义”。我叮叮当当是这一行导致错误“var renderTo = this.element.select('#box-'+ data.schoolpersonid).elements [0]”。 ANy solutionn – user998405 2013-09-26 09:59:34

+0

这是因为我的数据来自我的服务器,名为data.schoolpersonid。尝试在你的tpl中创建一个名为

的div,然后设置renderTo:'div.test-div'来看看它是如何工作的。 – jakeed1 2013-10-05 19:58:32