2010-03-23 104 views
0
我有在填充使用DirectStore組合框問題

一個組合框,組合框如下:填充使用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"]}}}] 

和C#代碼生成json

[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

您返回的JSON告訴組合框該怎麼做

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

我只有1場(名稱)的數據,這有值1,名稱2,名稱3 你的JSON有看起來更像這個:

data : [ 
    { 
     name : "name1" 
    }, { 
     name : "name2" 
    }, { 
     name : "name3" 
    } 
] 
+0

非常感謝。而不是列表我應該返回一個List >。現在正在工作 – skinssay 2010-03-24 20:17:15

0

絕招:我不知道怎麼又映射,但你可以將它轉換爲特定類型(匿名)這樣的(使用LINQ):

var list = names.Select(s => new { name = s }); 

返回
JObject>JProperty數據
          | ---->JObject>JProperty
                    | ---->List<string>

對我來說是之一>JProperty是可選的,讓我們說是名稱...那麼你的讀者根目錄是好的(數據),並且該字段也應該與我們所做的轉換正確映射。

在你的代碼,返回
JObject>JProperty數據
          | ---->Enumerable<{name}>

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

注:顯然,如果你知道如何直接映射字符串你不不必轉換它,會更好。