API-字段选项

Field options(字段选项)

字段定义定义了一条记录中字段的结构和行为。像下面这样格式:

FieldName: {
    //Field options
}

<a id="columnResizable"></a>

columnResizable boolean default: true

一个bool值,代表列是否可以被用户改变大小。
<a id="create"></a>

create boolean default: true

bool值,代表是否在添加的表单中显示。

key字段默认是false,其余的默认是true。
<a id="edit"></a>

edit boolean default: true

bool值,代表是否在编辑的表单中显示。

key字段默认是false,其余的默认是true。
<a id="defaultValue"></a>

defaultValue string default: none

你可以为这个字段设置一个默认值。但必须是一个有效的值。例如,这个字段是一个选项列表,那么这个值必须是这个列表中的其中一个。
<a id="dependsOn"></a>

dependsOn string or array default: none

这个选项用于创建级联下拉列表。如果一个下拉列表字段依赖于另外一个,jTable可以自动创建级联下拉列表。查看demo了解使用方法。
下面是一个简单的 国家/城市 级联下拉列表案例:

CountryId: {
    title: 'Country',
    options: 'Demo/GetCountryOptions',
    list: false
},
CityId: {
    title: 'City',
    dependsOn: 'CountryId', //Cities depends on countries.
    options: function (data) {
        if (data.source == 'list') {
            //Return url of all cities for optimization. 
            return 'Demo/GetCityOptions?countryId=0';
        }
        //This code runs when user opens edit/create form or changes country combobox on an edit/create form.
        return 'Demo/GetCityOptions?countryId=' + data.dependedValues.CountryId;
    }
}

一个字段可以依赖于多个字段。在上面的案例中,你可以用逗号把依赖的字段分开:'ContinentalId,CountryId',或者用一个数组也可以:dependsOn: ['ContinentalId', 'CountryId']

更多信息查看options
<a id="display"></a>

display function default: none

这个选项是一个function,允许你完全自定义表格中的一列。jTable直接展示function返回的结果到表格上。看下面的案例:

TestColumn: {
    title: 'Test',
    display: function (data) {
        return '<b>test</b>';
    }
}

‘TestColumn’列返回了一个加粗的‘test’文案,会应用到所有行。你可以返回任何text、html或者jQuery object,返回结果会直接展示到table上。每一行都会调用这个方法。在这个函数中,你可以使用data.record获取当前行的数据。例如:用data.record.name来获取数据里面的name属性值。

这个函数可以有很多用处,比如动态创建列、打开子表(点击行的时候)。
<a id="input"></a>

input function default: none

这个选项是一个function,允许你定义一个完全自定义的输入元素,在添加/编辑表单中使用。jTable直接将返回结果展示到表单中。看下面的案例:

Name: {
    title: 'Name',
    width: '20%',
    input: function (data) {
        if (data.record) {
            return '<input type="text" name="Name" style="width:200px" value="' + data.record.Name + '" />';
        } else {
            return '<input type="text" name="Name" style="width:200px" value="enter your name here" />';
        }
    }
}

data 参数包含一些属性用于创建输入框的时候。

  • data.formType:可以是‘create’或者‘edit’(对于表单)。
  • data.form:是这个表单的一个jQuery选择器。
  • data.record:如果当前是编辑表单(formType=‘edit’),获取当前行的数据。所以当处于创建表单情况下,此值是undefined。
  • data.value:获取字段的当前值。如果是创建表单,那么是默认值,如果是编辑表单,等于当前值。

jTable会自动为每个字段创建适当的输入元素,你可以使用这个选项来创建自定义的输入元素。记得设置输入元素的name属性,如果你想用post的方式发送请求到服务器。
<a id="inputClass"></a>

inputClass string default: none

一个字符串用来设置这个字段在创建/编辑表单中输入框的样式。因此,你可以在表单中为此字段输入元素设置样式。这在使用验证插件时很有用(我们将很快看到)。
<a id="inputTitle"></a>

inputTitle string default: none

这个选项为表单中的字段显示不同的标题。如果没有设置,标题会和title中设置的一样。
<a id="key"></a>

key boolean default: false

是一个bool值,代表此字段在当前记录中是否是主键。每一行记录中必须有一个且只能有一个主键,在编辑和删除的时候用。

如果一个字段被标记为key,添加和编辑操作会默认设置为false

如果一个主键字段在编辑表单中不能被编辑,那么会为它自动生成一个hidden元素。这样主键也能发送到服务器。如果主键字段可以被编辑(设置edit为true),则主键的原始值(更新前的值)会作为jtRecordKey发送到服务器。
<a id="list"></a>

list boolean default: true

bool值,代表此字段是否在表格中显示。
<a id="listClass"></a>

listClass string default: none

设置此字段在单元格(td)中的样式。这样,可以为表格中的每一个字段设置样式。
<a id="options"></a>

options object, array, URL or a function default: none

如果这个字段的值是要在一个选项列表中选择(默认是下拉列表,也可以是radio button列表),你必须提供一个数据源。一个选项数据源可以是一下几种格式:

  • object:属性名称是value,属性值是显示文本。这个有点怪
  • array:一个数组。
  • URL:请求数据作为数据源。
  • function:一个函数,它接收一些参数并且返回一个object、array或者URL字符串。
定义一个object

创建一个object是定义选项最简单的方法,像下面一样:

PhoneType: {
    title: 'Phone type',
    options: { '1': 'Home phone', '2': 'Office phone', '3': 'Cell phone' }
}

这样,jTable会在添加/编辑表单中为此字段创建一个下拉列表:

image

‘1’,‘2’,‘3’分别是下拉列表中的值。

定义一个数组

你也可以设置一个数组,像这样:

PhoneType: {
    title: 'Phone type',
    options: [{ Value: '1', DisplayText: 'Home phone' }, { Value: '2', DisplayText: 'Office phone' }, { Value: '2', DisplayText: 'Cell phone' }]
}

当然,如果值和显示的文本是一样的,也可以这样写:

ClassYear: {
    title: 'Phone type',
    options: ['1','2','3','4']
}
定义一个URL

你也可以定义一个URL来下载数据:

PhoneType: {
    title: 'Class year',
    options: '/Demo/GetPhoneTypes.php'
}

服务器正确返回的格式应该是这样的:

{
   "Result":"OK",
   "Options":[
      {
         "DisplayText":"Home phone",
         "Value":"1"
      },
      {
         "DisplayText":"Office phone",
         "Value":"2"
      },
      {
         "DisplayText":"Cell phone",
         "Value":"3"
      }
   ]
}

Result可以是“OK”或者“ERROR”,但如果是“ERROR”,必须返回一个“Message”属性。

定义一个函数

你可以定义函数来动态返回object、array或者URL。这样对于特殊的记录你可以使用不同的选项。

PhoneType: {
    title: 'Phone type',
    options: function(data) {
        if (data.source == 'list') {
            //Return url all options for optimization. 
            return '/Demo/GetPhoneTypes.php?UserType=0';
        }
        //This code runs when user opens edit/create form to create combobox.
        //data.source == 'edit' || data.source == 'create'
        return '/Demo/GetPhoneTypes.php?UserType=' + data.record.UserType;
    }
}

像上面一样,如果返回一个URL,jTable会下载数据作为选项。

为了优化,jTable将基于URL缓存所有选项列表,如果返回相同的URL则从本地缓存获取数据。你可以在函数中调用 data.clearCache() 方法来清除缓存。

IMPORTANT: jTable also uses this function to show the related field in the table for each shown record. This is because your record contains Value of the field, not DisplayText and jTable needs to show display text (instead of value) in the table. So, when data.source=='list', returning different URLs causes more than one download to list records in the table. This may be a major performance problem. So, as shown the sample above, return URL of all options while listing (data.source=='list') and return filtered options in edit/create forms (if you need).

你可能想要用ajax请求来从服务器获取数据。这种情况下,你应该从服务器同步获取数据,因为你应该从函数返回选项。参考demo和jQuery async 选项。

这个函数有一个data参数,它包含一些可用的字段和方法:

  • data.source:这个字段用于知道为什么调用这个方法。可选项:‘list’,‘create’,‘edit’。
  • data.clearCache():此方法用于清除当前返回的URL的缓存。所以你可以确保的是你的选项将会被重新下载。
  • data.form:此字段用于获取添加/编辑表单的引用(jQuery选择器)。当data.source是‘create’或者‘edit’的时候是有效的。
  • data.record:此字段用于通过调用这个函数获取响应的记录。因此,你可以根据记录的字段返回选项。如果data.source是‘list’或者‘edit’则是有效的。
  • data.dependedValues:如果你对这个字段设置了‘dependsOn’选项,你可以使用data.dependedValues来获取当前依赖字段的值。参考dependsOn

dependsOn选项和data.dependedValues作为一对,提供了创建级联下拉列表。点击查看完整案例。
<a id="optionsSorting"></a>

optionsSorting string default: none

默认,jTable不会对option进行排序。此选项可用于自动排序options。这个选项的有效值:

  • value:根据value对options进行排序(ascending)。
  • value-desc:根据value对options进行排序(descending)。
  • text:根据display text对options进行排序(ascending)。
  • text-desc:根据display text对options进行排序(descending)。

<a id="sorting"></a>

sorting boolean default: true

代表是否可以根据此列对表格进行排序(如果表格开启了排序)。
<a id="title"></a>

title string default: none

此列在表格中显示的标题,在表单中是作为此字段的label。如果该字段显示在表单中那么这个选项是必须的。
<a id="type"></a>

type string default: text

设置此字段的数据类型。如果此字段是text或者number,不需要在设置。其它一些类型:

  • password:在表单中展示一个type=password的文本框。

  • textarea:在表单中展示一个type=textarea的文本框。

  • data:时间字段(不包含time部分:2017-04-09)。在表单中会自动创建一个jQueryUI日期选择器。如果此字段是date(datetime)类型,可以自定义一些附加选项:

  • radiobutton:如果此字段是下拉列表中选择的值,它可以是combobox(默认)或者是radio button list。如果是单选按钮列表,设置类型为radiobutton。你必须提供options列表数据。

  • checkbox:在编辑这个字段的时候展示一个复选框。如果一个字段是checkbox,可以自定义一些附加选项:

    • values:这个属性用来这是选中/未选中状态。例如:{ '0' : 'Passive', '1' : 'Active' }。第一个值是未选中状态,第二个值是选中状态。
    • formText:默认的,当用户改变复选框的状态时它的显示文本会跟着改变。如果你想固定文本不变,你可以为此字段设置该选项(string类型)。
    • setOnTextClick:默认的,当用户点击复选框文本时,复选框的状态会改变。如果你不想做什么,可以设置该选项为false。
  • hidden:隐藏字段可以用于表单中编辑隐藏字段。它不会显示在表格上。你可能会想给隐藏字段设置默认值,可以使用defaultValue选项。查看案例了解简单的使用。

<a id="visibility"></a>

visibility string default: 'visible'

该字段对应的列可以通过设置此属性或者通过用户操作来展示或者隐藏。可选值:

  • fixed:该列会一直显示,但是用户操作不会影响。
  • visible:该列默认是显示的,但是可以被用户隐藏。
  • hidden:该列默认是隐藏的,但是可以被用户展示。

注意:用户可以通过右击列的标题来选择哪些列需要显示和隐藏。
<a id="width"></a>

width percentage default: '10%'

该列在表格中所占的宽。是一个百分比值(‘30%’)。如果该字段显示在表格上,那么它是必须的。最好将所有的字段的宽设置为100%。

注意:jTable的设计是适合其容器元素,而不是固定的宽度。所以,所有的列都将是100%。如果你要修改表的宽度,请设置它的容器宽度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容