2016-01-06 2 views
1

Мне нужно получить идентификатор от объекта json в функции кнопки. Если я попытаюсь получить доступ непосредственно к id, я получаю undefined (не ошибка/предупреждение), но если я попытаюсь получить доступ к объекту, я могу увидеть его без проблем (id и остальные данные).datatables получение 'undefined' из объекта json

var table = $('#example').DataTable({ 
    serverSide: true, 
    dom: 'Bfrtip', 
    ajax: '/get?op=2', 
    columns: [ 
     { data: 'id' }, 
     // more columns 
    ], 
    buttons: [ 
     { 
      text: 'New', 
      action: function (e, dt, node, config) { 
       window.location.href = '/url?op=new' 
      } 
     }, 
     { 
      text: 'Modify', 
      action: function (e, dt, node, config) { 
       window.location.href = '/url?op=modify&id=' + dt.row({ selected: true }).id()) 
      }, 
      enabled: false 
     }, 
     { 
      text: 'Delete', 
      action: function (e, dt, node, config) { 
      }, 
      enabled: false 
     } 
    ], 
    select: true 
}); 

я могу получить доступ к объекту JSon делает это:

alert(JSON.stringify(dt.row({ selected: true }).data())); 
// {"id":1,"key":"value","etc":"etc"} 

Это работает, я могу видеть объект в боевой готовности.

alert(dt.row({ selected: true }).id()); // undefined 
alert(JSON.stringify(dt.row({ selected: true }).id())); // "undefined" 
alert(JSON.stringify(dt.row({ selected: true }).data()[0])); // undefined 

Это не работает, я могу видеть undefined вместо целого числа в боевой готовности.

Я перепробовал много больше вещей, которые я даже не могу вспомнить, но никто не работает ...

Что я делаю неправильно?

+0

Я не понимаю, как вы выбираете строку. Я не нашел пример, который использует {selected: true}. – Bindrid

+0

Я этого не делал, кто-то дал мне этот код в качестве примера http://stackoverflow.com/questions/34573773/datatables-buttons-enable-disable-example-not-working/34573906?noredirect1_comment56893128_34573906. Вы знаете, как я могу получить значение id из выбранной строки? –

+0

@Bindrid Что-нибудь? –

ответ

1

Я думаю, что это то, что вы пытаетесь сделать. Посмотрите на мою кнопку изменения, которую я добавил после вас. Я использую extn, но если ваши данные имеют поле id, вы должны иметь возможность изменить имя для соответствия. Сделал некоторые другие изменения, поэтому он будет работать в моей локальной среде, но он должен работать, если вы входите в jsfiddle или локально, чтобы играть.

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

<!DOCTYPE html> 

    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title></title> 
     <link href="https://cdn.datatables.net/1.10.10/css/jquery.dataTables.min.css " rel="stylesheet" type="text/css" /> 
     <link href="https://cdn.datatables.net/buttons/1.1.0/css/buttons.dataTables.min.css" rel="stylesheet" type="text/css" /> 

      <link href="https://cdn.datatables.net/select/1.1.0/css/select.dataTables.min.css" rel="stylesheet" type="text/css" /> 
     <script src="//code.jquery.com/jquery-1.11.3.min.js" type="text/javascript"></script> 
     <script src="https://cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js" type="text/javascript"></script> 
     <script src="https://cdn.datatables.net/buttons/1.1.0/js/dataTables.buttons.min.js" type="text/javascript"></script> 
     <script src="https://cdn.datatables.net/select/1.1.0/js/dataTables.select.min.js" type="text/javascript"></script> 
     <script type="text/javascript"> 

      var mydata = [ 
        { 
         "name": "Tiger Nixon", 
         "position": "System Architect", 
         "salary": "$320,800", 
         "start_date": "2011/04/25", 
         "office": "Edinburgh", 
         "extn": "5421" 
        }, 
        { 
         "name": "Garrett Winters", 
         "position": "Accountant", 
         "salary": "$170,750", 
         "start_date": "2011/07/25", 
         "office": "Tokyo", 
         "extn": "8422" 

        }]; 



      $(document).ready(function() { 

       $.map(mydata, function (item, key) { 
          item["DT_RowId"] = item["extn"]}); 

       var table = $('#example').DataTable({ 
        serverSide: false, 
        dom: 'Bfrtip', 
        data:mydata, 
        columns: [ 

       { "data": "name" }, 
       { "data": "position" }, 
       { "data": "office" }, 
       { "data": "extn" }, 
       { "data": "start_date" }, 
       { "data": "salary" } 
         // more columns 
        ], 

        buttons: [ 
         { 
          text: 'New', 
          action: function (e, dt, node, config) { 
           window.location.href = '/url?op=new' 
          } 
         }, 
         { 
          text: 'Modify', 
          action: function (e, dt, node, config) { 

           window.location.href = '/url?op=modify&id=' + dt.row({ selected: true }).id() ; 
          }, 
          enabled: true 
         }, 
         { 
          text: 'Delete', 
          action: function (e, dt, node, config) { 
          }, 
          enabled: false 
         }, 
         { 
          extend: 'selected', 
          text: 'Modify', 
          action: function (e, dt, button, config) { 
          var rw = dt.rows({ selected: true }).data()[0]; 
          window.location.href = '/url?op=modify&id=' + rw.extn; 
         } 

       } 

        ], 
        select: true 
       }); 
      }); 

     </script> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
     <div> 

      <table width="100%" class="display" id="example" cellspacing="0"> 
        <thead> 
         <tr> 
          <th>Name</th> 
          <th>Position</th> 
          <th>Office</th> 
          <th>Extn.</th> 
          <th>Start date</th> 
          <th>Salary</th> 
         </tr> 
        </thead> 
        <tfoot> 
         <tr> 
          <th>Name</th> 
          <th>Position</th> 
          <th>Office</th> 
          <th>Extn.</th> 
          <th>Start date</th> 
          <th>Salary</th> 
         </tr> 

        </tfoot> 
       </table> 
     </div> 
     </form> 
    </body> 
    </html> 
+0

Спасибо! Я получил эту работу только с помощью команды: var rw = dt.rows ({selected: true}). Data() [0]; 'и' alert (rw.id); 'Таким образом, получается, что' {selected: true} 'на самом деле работает! –

0

Вы можете использовать свойство оказывать как этот

 "render": function (data, type, full, meta) { 

      var varName = full.varName; 
      return '<div>'+ varName +'</div>' //or whatever html you want to render  
    } 
+0

Нет, мне нужно получить значение id из выбранной строки. –

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