如何使用运行时创建的对象渲染数据表单元格

How to render a datatable cell with an object created at runtime

对于了解 javascript 的人来说,这将是小菜一碟。我想将 wavesurfer 对象放入数据表的渲染函数中。当我单击数据表中的按钮时,渲染会在运行时创建一个带有 id="demo" 的 div。

datatable渲染函数

"renderer": function ( api, rowIdx ) {
 ....
 return data ?
 $('<table/>').append( data ).prop('outerHTML') + $("<div></div>", {"id":"demo"}).prop('outerHTML') : false;
 }

要填充容器的音频对象 id="demo"

var wavesurfer = Object.create(WaveSurfer);
wavesurfer.init({
    container: document.querySelector('#demo'),
    waveColor: 'violet',
    progressColor: 'purple'
 });

wavesurfer.load('//upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg');

页面加载时出现此错误:

Uncaught Error: Container element not found

这是因为我还没有点击创建 div 的按钮。

我希望能够使用不同的文件 (.load) 为每一行呈现对象? 你能帮我解决一下吗

我建议您使用 .wawe class 而不是多个 id,并将文件 url 设置为元素本身的属性,例如{"class":"wawe", url:"//upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg"} :

return data 
  ?  $('<table/>').append( data ).prop('outerHTML') + $("<div></div>", {"class":"wawe", url:"//upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg"}).prop('outerHTML') 
  : false;

当单击某行触发子行时,它会立即获得 class .parent。因此,您可以在 .parent 上创建点击处理程序,找到 .child 行(始终是下一行).wawe 元素,并在初始化 WaveSurfer 时使用其中的 url 属性:

table.on('click', 'tr.parent', function() {
   var wavesurfer = Object.create(WaveSurfer),
       container = $(this).next('tr').find('.wawe')[0];
    wavesurfer.init({
      container: container,
      waveColor: 'violet',
      progressColor: 'purple'
   });
  wavesurfer.load(container.getAttribute('url'));
});       

演示 -> http://jsfiddle.net/fxojLmvd/

希望这能解决问题。我以前不知道 WaveSurfer,谢谢你:)