javascript
  • angularjs
  • checkbox
  • dynamic-columns
  • 2016-12-05 5 views 4 likes 
    4

    В моем угловом приложении я динамически создаю таблицу из javascript.привязка флажка не работает в динамически созданной колонке

    $("#tableName").html("<table id='dtData' name='dtData' dt-options='dtOptions' dt-columns='dtColumns' class='table table-striped table-bordered'></table>"); 
    

    вот как я генерация столбцов

    var header = data[0], dtColumns = []; 
    
          //create columns based on first row in dataset 
          for (var key in header) 
          { 
          // console.log(key); 
           if(key == "sendEmail") 
           { 
            dtColumns.push(DTColumnBuilder.newColumn(key).withTitle("Send Email").renderWith(actionsHtml)); 
    
           } 
           else 
           { 
           dtColumns.push(DTColumnBuilder.newColumn(key).withTitle(key)); 
           } 
          } 
    

    это actionsHtml функция

    function actionsHtml(data, type, full, meta) { 
    
        return '<input type="checkbox" name="sendEmail" value="' + data+'">'; 
    } 
    

    И здесь я завершаю эту таблицу

    $scope.dtColumns = dtColumns; 
    
          //create options 
          $scope.dtOptions = DTOptionsBuilder.newOptions() 
          .withOption('data', data) 
          .withOption('dataSrc', ''); 
    
          //initialize the dataTable 
          angular.element('#dtData').attr('datatable', ''); 
          $compile(angular.element('#dtData'))($scope); 
    

    Это создает таблицы и затем столбец типа флажка, но он не привязывает значение к флажку. Вот таблица Column

    и консольное значение столбца

    enter image description here

    Но проблема .. chechbox колонок привязка не работает .. или я проверить/снимите его с HTML или JavaScript, то не вносит изменений в таблицу/исходный список.

    Любая помощь будет оценена по достоинству.

    +1

    Любой шанс вы могли бы м ake [Plunker] (https://plnkr.co/), демонстрирующий проблему? – Fissio

    +0

    на самом деле слишком плохо, чтобы сделать плункер, но я попробую –

    +1

    Используйте атрибут 'checked' вместо' value' ([doc] (https://developer.mozilla.org/en/docs/Web/HTML/Element/Input/) флажок)). Вы компилируете шаблон, но в нем нет привязки, поэтому привязка не работает, используйте ng-bing или ng-checked вместо '+ data +'. – etiennecrb

    ответ

    2

    Вы можете решить эту проблему простым, если/else ваши данные .. если данные true, добавьте checked собственность еще нет. А затем захватить onClick событие и передать какой-то Id к этой функции и обновления значений соответственно ..

    Что-то вроде этого

    if(key == "SendEmail") 
    {     
    
    dtColumns.push(DTColumnBuilder.newColumn(key).withTitle("Send Email") 
    .renderWith(function(data, type, full, meta) { 
    if(data){ 
          return '<input type="checkbox" checked="checked" name="SendEmail" onClick="SendEmail_Clicked('+Id+')">'; 
         } 
    else 
        { 
         return '<input type="checkbox" name="SendEmail" onClick="SendEmail_Clicked('+Id+')">'; 
        } 
    }));} 
    

    Для вызова SendEmail_Clicked, сначала нужно связать его с вызовом функции, в противном случае это не будет работать

    var dt = this; 
    dt.SendEmail_Clicked = SendEmail_Clicked; 
    

    Для получения более подробной информации, you can read this

    +0

    с небольшими изменениями .. это сработало для меня .. Спасибо :) –

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

    • Нет связанных вопросов^_^