2016-09-29 39 views
0

我有以下组件,我该如何动态编译rowTemplate和cellTemplate,并在模板上绑定动态添加的事件?关于Vue2.0我应该如何编译模板和绑定模板事件

在下面的代码中,只有原始html的输出。

我想不出任何方法来解决这个问题。请帮助,谢谢!

<template> 
    <div class="table-scrollable"> 
     <table class="table table-bordered table-hover" :class="{ 'table-striped' : stripe }"> 
      <thead> 
       <tr v-if="columns.length"> 
        <th v-if="isRowIndex">#</th> 
        <th v-for="(col, index) in columns"> 
         {{ col.name }} 
        </th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr v-else v-for="(entry, index) in data"> 
        <td v-if="isRowIndex">{{ index + 1 }}</td> 
        <td v-for="col in columns"> 
         {{ addNewElement(entry,col)}} 
        </td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 
</template> 

<script> 
    export default { 
     data() { 
      return { 
       rowTemplate: '<tr v-else v-for="(entry, index) in data">' + 
        ' <td v-if="isRowIndex">{{ index + 1 }}</td>' + 
        ' <td v-for="col in columns">' + 
        '  {{ entry[col.field] }} ' + 
        ' </td>' + 
        '</tr>', 

       columns: [{ 
        name: app.localize('Actions'), 
        width: 200, 
        cellTemplate: '<div class=\"ui-grid-cell-contents\">' + 
         ' <div class="btn-group dropdown" uib-dropdown="" dropdown-append-to-body>' + 
         ' <button class="btn btn-xs btn-primary blue dropdown-toggle" uib-dropdown-toggle="" aria-haspopup="true" aria-expanded="false"><i class="fa fa-cog"></i> ' + app.localize('Actions') + ' <span class="caret"></span></button>' + 
         ' <ul uib-dropdown-menu>' + 
         '  <li><a @click="impersonate(entry)">' + app.localize('LoginAsThisTenant') + '</a></li>' + 
         '  <li><a @click="editTenant(entry)">' + app.localize('Edit') + '</a></li>' + 
         '  <li><a @click="editFeatures(entry)">' + app.localize('Features') + '</a></li>' + 
         '  <li><a @click="deleteTenant(entry)">' + app.localize('Delete') + '</a></li>' + 
         ' </ul>' + 
         ' </div>' + 
         '</div>' 
       }, { 
        name: app.localize('TenancyCodeName'), 
        field: 'tenancyName', 
        cellTemplate: '<div class=\"ui-grid-cell-contents\">' + 
         ' <i title="' + app.localize('HasOwnDatabase') + '" class="fa fa-database"></i> {{entry.tenancyName}}' + 
         '</div>' 
       }] 
      } 
     }, 
     methods: { 
      addNewElement(entry, col) { 
       if (col.cellTemplate && col.cellTemplate.length > 0) { 
        // Here I should be how to compile the template and binding template events 

       } else { 
        return entry[col.field]; 
       } 
      } 
     } 
    } 
</script> 
+1

您应该创建一个'Row'组件并在您的Table组件中使用它,并且您应该创建一个'Cell'组件并在Row组件中使用它。 –

+0

我已经尝试过这种解决方案,但cellTemplate呈现为一个html字符串而不是原始html,并且我不知道如何动态绑定cellTemplate上的自定义事件 – amin

回答

0

正如J.布鲁尼所说,你应该使用组件。然而,这只适用于Vue 2,因为Vue 1使用真正的DOM,并且仅限于HTML限制。在这种情况下,浏览器将去除表中的任何特殊元素。 您是否在寻找Vue 1的解决方案?

+0

我知道,但我不知道如何实现 – amin

+0

@Posva - 至少在我写这篇文章的那一刻,问题中有一个“vue2”标签。 –

+0

感谢您的建议,我不习惯StackOverflow,所以我没有看到标签。我下次会更好看 – Posva