2013-03-05 48 views
2

我有一個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文件很糟糕,所以任何幫助都會更好。

回答

0

我認爲由於Sencha Touch框架的管理和性能,XTemplate不支持此功能。

其次,你不能這樣做,因爲基本上你試圖在你的itemTpl裏面的HTML和JavaScript之間合併時,sencha模板只允許html結構。

爲了解決這種情況下,你可以看看Component Dataview

2

其實你可以做到這一點,你只需要一點點創意。這裏

看看我的博客文章: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

相關問題