使用DirectStore填充组合框时出现问题,组合框如下:
this.Combo = new Ext.form.ComboBox({
fieldLabel: "Name",
editable: false,
triggerAction: 'all',
mode: 'remote',
store: new Ext.data.DirectStore({
reader: new Ext.data.JsonReader({
successProperty: 'success',
idProperty: 'name',
root: 'data',
fields: [ 'name' ]
}),
autoLoad: true,
api: { read: SS.MyApi.getNames }
}),
valueField: 'name',
displayField: 'name'
});
返回的json是:
[{"type":"rpc","tid":7,"action":"MyApi","method":"getNames","result":{"success":true,"data":{"name":["name1","name2","name3"]}}}]
生成json的c#代码
[DirectMethod]
public JObject getNames()
{
List<string> names = new List<string>();
names.Add("name1");
names.Add("name2");
names.Add("name3");
JObject data = new JObject();
data.Add(new JProperty("name", names));
return new JObject(
new JProperty("success", true),
new JProperty("data", data)
);
}
组合框只显示一个带有“name1,name2,name3”的条目。我如何为每个名字输入一个条目? 提前谢谢!
答案 0 :(得分:0)
你返回的json告诉组合框确切地做什么
"data":{"name":["name1","name2","name3"]}
我在数据中只有1个字段(名称),其值为name1,name2,name3 你的json看起来更像是这样:
data : [
{
name : "name1"
}, {
name : "name2"
}, {
name : "name3"
}
]
答案 1 :(得分:0)
技巧:我还不知道如何映射这个,但你可以将它转换为特定类型(匿名),如下所示(使用Linq):
var list = names.Select(s => new { name = s });
你回来了
JObject
&gt; JProperty
数据JObject
&gt; JProperty
姓名List<string>
对我而言JObject
&gt;之一JProperty
是可选的,让我们说是名字......那么你的读者根目录是正确的(数据),而且字段也应该正确映射我们所做的转换。
在您的代码中,您返回
JObject
&gt; JProperty
数据
| ----&GT; Enumerable<{name}>
"result":{"success":true,"data":[{"name":"name1"},{"name":"name2"},{"name":"name3"}]}
注意:显然,如果您知道如何直接映射字符串,则无需转换它,并且会更好。