我有一种情况,我在jqGrid中有多个列,它们提供了相同的列表来填充下拉列表。
{ name: "Manager", index: "Manager", width: 120, editable: true, edittype: "select", editoptions: { dataUrl: "/Person/GetSelectData" }, editrules: { required: false} }, { name: "Delegate", index: "Delegate", width: 120, editable: true, edittype: "select", editoptions: { dataUrl: "/Person/GetSelectData" }, editrules: { required: false} },
我想看看是否有一种方法可以使tihs正常工作,而无需两次单独的ajax调用同一操作,只是为了获得相同的数据列表:
dataUrl: "/Person/GetSelectData"
这样我就可以调用它一次,并且将项目列表链接到这两列?在jqGrid中可以吗?
所需的任何实现都将意味着为缓存某种数据"/Person/GetSelectData"。我更喜欢自己的一种方法是value代替dataUrl。选择值列表可以包含 在对服务器的主响应中,该响应将 填充网格。如果使用的动作url可以返回 其他数据 。您可以将返回的数据内部使用value定义为一个函数,也可以将其value内部设置为beforeProcessing。为了使我的建议更清楚,我在一个示例中进行解释。
"/Person/GetSelectData"
value
dataUrl
url
beforeProcessing
第一种方式:用法value即功能。可以将您通常返回的数据包含在"/Person/GetSelectData"主要JSON响应中。例如,您可以使用userdata(或输入数据的任何其他扩展名):
userdata
{ "rows": [ ... ], "userdata": { "Persons": "Bill:Bill;Oleg:Oleg;Leora:Leora" } }
然后可以使用
beforeProcessing: function (data) { var $self = $(this), userData = data.userdata, persons, selectOptions; if (userData && userData.Persons) { persons = userData.Persons; selectOptions = { searchoptions: { value: ":All;" + persons }, // for toolbar search stype: "select", editoptions: { value: persons }, edittype: "select" }; $self.jqGrid("setColProp", "Manager", selectOptions); $self.jqGrid("setColProp", "Delegate", selectOptions); } }
顺便说一句,甚至可以使用formatter: "select"“经理”和“代表”列。它允许使用id代替名称。例如
formatter: "select"
"Persons": "3:Bill;1:Oleg;2:Leora"
每个人都应该加入formatter: "select"到selectOptions了。它允许使用IDS 3,1以及2主数据的内部(rowsJSON数据的一部分)。使用的标准方式dataUrl不允许使用formatter:"select"。
selectOptions
3
1
2
rows
formatter:"select"