2015-10-19 3 views
1

Я хочу создать динамическую таблицу в bootstrap/jquery, похожую на this one В этом примере данные жестко закодированы, поэтому я подумал об изменении его с данными, поступающими от json. Кроме того, каждая строка в таблице должен иметь гиперссылку добавил, так что мой JQuery код выглядит следующим образом:Почему мои данные в загрузочном блоке не отображают данные?

$('#dataTables-example').DataTable({ 
       responsive: true 
     }); 

var data = '[{"number":"1","id":"2","price":"100.70","date":"2015-10-18 03:00:00","hidden":"21"}, 
{"number":"2","id":"2","price":"88.20","date":"2015-10-18 04:00:00","hidden":"22"}]'; 

    json = JSON.parse(data); 

$.each(json, function(i, v) { 
    $('<tr/>', { 
    html: [$('<td/>', { 
     text: v.number 
    }), $('<td/>', { 
     text: v.id 
    }), $('<td/>', { 
     text: v.price 
    }), $('<td/>', { 
     text: v.date 
    }), $('<td/>', { 
     html: [ 
     $('<a/>', { 
      href: '#', 
      class: 'show-details', 
      text: 'show details', 
      data: { id: v.hidden }, 
      click: function() { 
      var id = $(this).data('id'); 
      console.log(id); 
      alert(id); 
      } 
     }) 
     ] 
    })] 
    }).appendTo('#dataTables-example tbody') 
}) 

В моем HTML я жёстко заголовок таблицы:

<div class="panel-body"> 
    <div class="dataTable_wrapper"> 
     <table class="table table-striped table-bordered table-hover" id="dataTables-example"> 
      <thead> 
       <tr> 
        <th>number</th> 
        <th>id</th> 
        <th>price</th> 
        <th>date</th> 
        <th>show details</th> 
        <th style="display:none;">hidden identifier</th> 
       </tr> 
      </thead> 
      <tbody></tbody> 
     </table> 

и позже благодаря к моему сценарию я добавляю строки в таблицу. Просто как тот. Однако, как вы можете видеть в моей скрипке:

http://jsfiddle.net/uo8rc5qL/6/

есть проблема, потому что, так как данные не зашиты, таблица думает, что нет строк и отображает определенное сообщение там No data available in table. Кроме того, когда я нажимаю любое имя столбца для сортировки данных, содержимое исчезает, так как таблица считает, что после сортировки ничего не видно ... Как исправить эту ситуацию?

ответ

1

Всегда пройти через API! Вставьте новые строки с помощью table.row.add([..]) вместо JQuery $('<tr>', {... подхода:

$.each(json, function(i, v) { 
    var row = table.row.add([v.number, v.id, v.price, v.date, '<a>show details</a>']); 
    table.cells({ row: row.index(), column: 4 }).nodes().to$().find('a') 
     .attr('href', '#') 
     .addClass('show-details') 
     .css('cursor', 'pointer') 
     .data('id', v.hidden) 
     .on('click', function() { 
      var id = $(this).data('id'); 
      console.log(id); 
      alert(id); 
     }) 
    table.draw(); 
}) 

раздвоенной скрипка ->http://jsfiddle.net/2wujw71x/1

+0

Спасибо, работает как шарм, еще один вопрос - есть ли способ сделать текст «показать детали» только кликабельным, а не целая ячейка с этой строкой? Кроме того, как я могу добавить соответствующий курсор, когда пользователь наводит этот текст (стандартная гиперссылка)? – user3766930

+0

@ user3766930, да, моя ошибка, забыл нацелить элемент '' только :(обновил скрипку и ответил с обеих исправлений. – davidkonrad

+0

еще один вопрос - я вижу, что вы связываете данные здесь. .data ('id', v.hidden) ', скажите мне - возможно ли связывать более одного значения? Например, я хотел бы привязать v.hidden как id и v.price к цене - это возможно? – user3766930

2

Это потому, что вы просто добавляете данные в таблицу, а не в базовый источник данных. Решение состоит в том, чтобы позволить DataTables обрабатывать загрузку данных:

$('#dataTables-example').DataTable({ 
       responsive: true, 
       "data": JSON.parse(datasrc), 
       "columns": [ 
        { data: 'number' }, 
        {data: 'id'}, 
        {data: 'price' }, 
        { data: "date" }, 
        { 
         "data": "null", 
         "defaultContent": "<a>click</a>" 
        }, 
        { data: "hidden" } 
       ] 
     }); 

Рабочий пример: JSFIDDLE

+0

спасибо, что почти работает, как я хочу! можете ли вы просто сказать мне, можно ли показать предупреждение, которое отображает скрытое значение, когда пользователь нажимает на гиперссылку в таблице? Например, когда пользователь нажимает на нее в первой строке, он должен предупредить 21 и во второй строке 22 .. – user3766930

Смежные вопросы