Knockout JS: Creating dynamic table columns

前端 未结 2 1127
半阙折子戏
半阙折子戏 2020-12-22 00:07

Using Knockout JS:

I have a requirement as.

I have a table with 2 static columns where each has a text-box. I also have a add row button outside the table an

2条回答
  •  醉话见心
    2020-12-22 00:59

    I was able to resolve this using the post at: Knockout JS: Get Textbox data from Table under for-each binding

    Here is my code:

     (function() {
    var ViewModel = function() {
    var self = this;
    self.valuesData = ko.observableArray();
    
    self.columns = ko.computed(function() {
      if (self.valuesData().length === 0)
        return [];
    
      return ValuesData.columns;
    });
    
    
    self.addRow = function() {
      self.valuesData.push(new ValuesData());
    };
    
    self.Save = function() {
      alert('Data:')
    };
    
    self.removeRow = function(data) {
      self.valuesData.remove(data);
    };
    }
    
    // Dynamic values.
    var ValuesData = function(siid, comment) {
    var self = this;
    
    // Add observables dynamically for all relevant columns.
    for (var i = 0; i < ValuesData.columns.length; i++) {
      var column = ValuesData.columns[i];
      self[column.Property] = ko.observable(column.InitialValue)
     }
    };
    
    // Basic column definition.
    ValuesData.columns = [{
      Caption: 'SIID',
      Property: 'SIID',
      InitialValue: undefined
    },
    {
      Caption: 'Column 1',
      Property: 'Col1',
      InitialValue: undefined
    },
    {
      Caption: 'Column 2',
      Property: 'Col2',
      InitialValue: 'banana'
    },
    {
      Caption: 'Comment',
      Property: 'Comment',
      InitialValue: undefined
    }
    ]
    
    vm = new ViewModel()
    ko.applyBindings(vm);
    
    // add initial row.
    vm.addRow();
    
    
    })();
    

    Here is the html part:

     
      



    提交回复
    热议问题