【问题标题】:multi column headers iggrid with knockout issue具有淘汰赛问题的多列标题 iggrid
【发布时间】:2015-03-10 23:18:20
【问题描述】:

我正在使用 IgniteUI 在网站上放置一个网格。使用 KnockoutJS 绑定网格。我在我的应用程序中为许多网格使用了这个设置,但我遇到了一个奇怪的问题。

我需要一个具有多列标题的网格,然后是另一列。我使用了多列标题,它们工作正常。但是,在这种情况下,网格会将应该在组之后的列中的信息放入组的第一列,如以下小提琴所示:http://jsfiddle.net/rc5a4vbs/3/。 ColumnY 列的两行都应该有一堆 Y,如 Javascript 中所示。

function ViewModel() {
    var self = this;   
    self.value = ko.observable(false);
    self.data = ko.observableArray([ 
        { "ColumnA": ko.observable(1), "ColumnD": ko.observable(21), "ColumnE": ko.observable("dkifhugb"),
          "ColumnF": ko.observable(true), "ColumnG": ko.observable("false"),
          "Procedure": ko.observable("Final Column"),
          "TestConditionGroup": {
              "ColumnY": ko.observable("YYYYYYYYYYYY"), "ColumnZ": ko.observable("ZZZZZZZZZ") 
          }
        },
        { "ColumnA": ko.observable(2), "ColumnD": ko.observable(14), "ColumnE": ko.observable("5347347"),
          "ColumnF": ko.observable(false), "ColumnG": ko.observable("string"),
          "Procedure": ko.observable("Final Column"),
          "TestConditionGroup": {
             "ColumnY": ko.observable("yyyyyyyyyyyy"), "ColumnZ": ko.observable("zzzzzzzzzzz") 
          }
        }
    ]);
    self.getColumns = function() {
        //debugger;
        var columns = [
                { key: 'ColumnA', headerText: '', width: '0px', hidden: true },
                { key: 'ColumnD', headerText: 'Sequence', width: '100px' },
                { key: 'ColumnE', headerText: 'Iteration', width: '100px' },
                { key: 'ColumnF', headerText: 'Risk', width: '100px' },
                { key: 'ColumnG', headerText: 'Sub-Chapter Title', width: '200px' }
            ];
        var columns2 = [
            { key: 'TestConditionGroup', headerText: 'ColumnY', width: '100px', 
              formatter: function(val){
                  return val[this.headerText];  
              } 
            },
            { key: 'TestConditionGroup', headerText: 'ColumnZ', width: '100px', 
              formatter: function(val){
                  return val[this.headerText];  
              } 
            }
        ];
        columns.push({ key: 'TestConditionGroup', headerText: 'Test Conditions', group: columns2 });
        columns.push({ key: 'Procedure', headerText: 'Procedure', width: '200px'});
        return columns;
    }
} 

在我将分组列中的数据放入行对象中的对象之前,网格一直正常工作。这就是服务器向我发送信息的方式。当所有列都在顶层时,它工作正常。

如何通过此设置为提供的数据正确显示数据?任何帮助将不胜感激。

【问题讨论】:

    标签: javascript knockout.js infragistics ignite-ui


    【解决方案1】:

    问题不是由多列标题引起的,而是由数据中的复杂对象属性引起的。
    如果要绑定 ColumnY 和 ColumnZ,则必须将它们声明为未绑定列,并在格式化程序函数中从数据的 TestConditionGroup 属性中提取它们的值。您可以通过在格式化程序函数中使用第二个参数来做到这一点,该参数将为您提供对当前行数据的引用。

    var columns2 = [
    { key: 'ColumnY', headerText: 'ColumnY', width: '100px', unbound: true,
      formatter: function(val, row){
          return row["TestConditionGroup"][this.headerText];  
      } 
    },
    { key: 'ColumnZ', headerText: 'ColumnZ', width: '100px', unbound: true, 
      formatter: function(val, row){
          return row["TestConditionGroup"][this.headerText];  
      } 
    }];  
    

    还要使来自 TestConditionGroup 列的数据在格式化程序函数中可用,您必须将 localSchemaTransform 配置为 false。 您需要做的最后一件事是将 autoGenerateColumns 设置为 false,因为默认情况下为 true。
    这是更新的小提琴的链接: http://jsfiddle.net/rc5a4vbs/4/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-21
      • 2015-03-30
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      相关资源
      最近更新 更多