【问题标题】:Dynamic creation of multilevel Javascript object for jQuery-jTable为 jQuery-jTable 动态创建多级 Javascript 对象
【发布时间】:2013-09-14 10:06:30
【问题描述】:

jTable (jTable.org) 布局由以下代码定义。我想动态构建它(基于从数据库查询返回的 AJAX)。

{
    title: 'My Dynamic Title',
    fields: {
        id: {
            title: 'ID'
        },
        salesperson: {
            title: 'Salesperson'
        },
        pivot1: {
            title: '2012-01'
        },
        pivot2: {
            title: '2012-02'
        },
        pivot3: {
            title: '2012-03'
        }
    }
}    

显示的数据是一个数据透视表,因此列数及其标题会发生变化。我可以动态修改上面的字段部分吗?例如,有四个带有相关列标题的数据透视列。

回答

多亏了 Barmar 和广泛的阅读,我才明白了这一点。诀窍是在每个级别插入一个新对象。将其弹出到 jsfiddle.net 中,您可以看到结果。它将以编程方式创建上面的对象。

var myobj = {}; //description for jquery-jtable configuration.
var colnames = ['pivot1', 'pivot2', 'pivot3'];
var titles   = ['2012-01', '2012-02', '2012-03'];

myobj['title'] = "My Dynamic Title";
myobj['fields'] = {};                     //create a second level under 'fields'.
myobj.fields['id'] = {title: 'ID'};
myobj.fields['salesperson'] = {title: 'Salesperson'};
for(i = 0; i < colnames.length; i++) {
    myobj.fields[colnames[i]] = {};       //create a third level under column name.
    myobj.fields[colnames[i]].title = titles[i];
}
alert(JSON.stringify(myobj, null, 4));

【问题讨论】:

  • 成功了!!我尝试了很长一段时间,但无法做到这一点,并且在那天遇到了这篇文章。谢谢。

标签: javascript jquery-jtable


【解决方案1】:

我没有看到动态更改字段规范的方法。但是如果你正在修改表,你可以简单地销毁旧的 jTable 并重新初始化它:

$("#TableContainer").jtable("destroy");
$("#TableContainer").jtable({
    // New options
});

如果有一些选项在所有实例中保持一致,您可以使用变量来保存这些选项:

var jtable_options = {
    title: "My Table Title",
    fields: {}
};

在初始化 jtable 之前,您需要:

jtable_options.fields = {
    id: { title: 'ID' },
    salesperson: { title: 'Salesperson' }
    ...
};
$("#TableContainer").jtable(jtable_options);

【讨论】:

  • 谢谢,Barmar,但是如何以编程方式(在 Javascript 中)创建 .fields 对象?在 php 中我可以使用 =column_name?>: {title: '=cell_value?>'} 我将如何在对象内部的 Javascript 中执行此操作? (数据将来自 JSON。)
  • 它只是一个 Javascript 对象,您可以像 PHP 中的关联数组一样访问它:jtable_options.fields[field_name] = { title: field_title };,其中field_namefield_title 是变量。
  • 感谢 Barmar,我一直未能成功删除元素,使用 jQuery 清空元素。它不会重新创建表,而是离开旧表。这就像一个魅力。在我的代码中,我有一个服务器端控制器,它根据我要编辑的表返回列定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多