2017-02-05 7 views
0

子テーブルを持つJquery jtableがあります。限り、私はそれがjtableデモの例として設定されて見ることができます。メインテーブル=(連絡先)と子テーブル(カテゴリ)は問題なく表示されます。私の問題は、カテゴリ子テーブルの削除アクションは、私が期待していたように行キー値(categoryID)をポストしていないため、なぜ表示されないのか分かりません。メインテーブルの同様のアクションは、うまく機能します。 postData変数を出力する下のコードの2つのconsole.log行に注意してください。最初の列は連絡先表(ID)のIDを報告しますが、2番目の列はCategoryIDの代わりに空の配列を出力します。どんな助けもありがたい。jtableの子テーブルがPOSTキー値でない

おかげ

function ReturnAjax(theurl, postdata, errorfn) { 
    return $.ajax({ 
     url: theurl, 
     type: 'POST', 
     dataType: 'json', 
     data: postdata, 
     cache: false, 
     error: errorfn 
    });    
} 

    $('#ContactsTableContainer').jtable({ 
    title: 'Contacts', 
    paging: true, 
    pageSize: 30, 
    sorting: true, 
    defaultSorting: 'LastName ASC', 
    selecting: true, 
    selectOnRowClick: true, 
    openChildAsAccordion: true, 
    deleteConfirmation: false, 
    actions: { 
     listAction: function(postData, jtParams) { 
      console.log("ContactsTableContainer - Loading list from custom function..."); 
      return $.Deferred(function($dfd) { 
       $.ajax({ 
        url: 'ContactsData.php?action=list&jtStartIndex=' + jtParams.jtStartIndex + '&jtPageSize=' + jtParams.jtPageSize + '&jtSorting=' + jtParams.jtSorting, 
        type: 'POST', 
        dataType: 'json', 
        data: postData, 
        success: function(data) { 
         if(data['RowIDs']) { RowIDs = data['RowIDs'].toString().split(','); } 
         $dfd.resolve(data); 
        }, 
        error: MyError 
       }); 
      }); 
     }, 
     deleteAction: function(postData) { 
      console.log('deleting from contacts - custom function..., '+JSON.stringify(postData)); 
      $.when(
       ReturnAjax(
        'ContactsData.php?action=list&ContactID='+postData['ID'], 
        postData, 
        MyError 
       ) 
      ).then(
       function(data) { 
        if (data.Result != 'OK') { alert(data.Message); } 
        var msg = ''; 
        var len = data.Records.length; 
        if(len>0) { 
         msg = '\t'+data.Records[0].Category; 
         for(var i=1 ; i<len ; i++) { msg += '\n\t'+data.Records[i].Category; } 
         msg = 'Contact is in the following categories\n'+msg; 
        } 
        msg += '\n\nConfirm deletion of this contact'; 
        if(confirm(msg)) { 
         $.when(
          ReturnAjax(
           'ContactsData.php?action=delete', 
           postData, 
           MyError 
          ) 
         ).done(
          $('#ContactsTableContainer').jtable('reload') 
         ); 
        } else { 
         $('#ContactsTableContainer').jtable('reload'); // Had to put this here to ensure that same delete button could be used again 
        }  
       } 
      ).fail(function() { console.log('ajax call went wrong'); }); 
     }, // end of delete action 
    }, // end of actions 
    fields: { 
     ID: { 
      key: true, 
      create: false, 
      edit: false, 
      list: false, 
      visibility: 'hidden' 
     }, 
     Categories: { 
      title: '', 
      width: '5%', 
      sorting: false, 
      create: false, 
      display: function(contact) { 
       var $img = $('<img src="Images/layers.png" title="Show contact\'s categories" />'); 
       //Open child table when user clicks the image 
       $img.click(function() { 
        console.log('display function (contact)..., '+JSON.stringify(contact)); 
        $('#ContactsTableContainer').jtable(
         'openChildTable', 
         $img.closest('tr'), //Parent row 
         { 
          title: contact.record.Name + ' - Categories', 
          selecting: true, 
          selectOnRowClick: true, 
          actions: { 
           listAction: 'ContactsData.php?action=list&ContactID=' + contact.record.ID, 
           deleteAction: function(postData) { 
            console.log('deleting from custom category function..., '+JSON.stringify(postData)); 
            $.when(
             ReturnAjax(
              'ContactsData.php?action=deleteAssignment&ContactID=' + contact.record.ID, 
              postData, 
              MyError 
             ) 
            ).done(
             $('#ContactsTableContainer').jtable('reload') 
            ); 
           } 
          }, 
          fields: { 
           CategoryID: { key: true, create: false, edit: false, list: false, visibility: 'hidden' }, 
           ContactID: { type: 'hidden', defaultValue: contact.record.ID }, 
           Category: { title: 'Category' } 
          } 
         }, 
         function(data) { data.childTable.jtable('load'); } 
        ); 
       }); 
       //Return image to show on the person row 
       return $img; 
      } 
     }, 
     FirstName: { 
       title: 'Forename', 
       width: '25%', 
     }, 
     LastName: { 
       title: 'Surname', 
       width: '25%', 
     }, 
     HomePhone: { 
      title: 'Phone', 
      width: '15%', 
      sorting: false, 
     }, 
     Mobile: { 
      title: 'Mobile', 
      width: '15%', 
      sorting: false, 
     }, 
     Email: { 
      title: 'Email', 
      width: '20%', 
      sorting: false, 
     }, 
     Name: { 
       type: 'hidden' 
     }, 
    } 
}); 

//Load list from server 
$('#ContactsTableContainer').jtable('load'); 

答えて

0

OK、私はこれを見て時間を費やしていることが誰にも邪魔して申し訳ありませんが、それを解決しました。問題は、私の子テーブルの変数名が間違っていたことでした。category_IDとContact_IDでした。

関連する問題