使用DirectStore填充组合框

时间:2010-03-23 16:08:13

标签: extjs

使用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”的条目。我如何为每个名字输入一个条目? 提前谢谢!

2 个答案:

答案 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数据
| ----&GT; JObject&gt; JProperty姓名
| ----&GT; List<string>

对我而言JObject&gt;之一JProperty是可选的,让我们说是名字......那么你的读者根目录是正确的(数据),而且字段也应该正确映射我们所做的转换。

在您的代码中,您返回
JObject&gt; JProperty数据
| ----&GT; Enumerable<{name}>

"result":{"success":true,"data":[{"name":"name1"},{"name":"name2"},{"name":"name3"}]}

注意:显然,如果您知道如何直接映射字符串,则无需转换它,并且会更好。