2010-03-23 3 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 поле (имя) в данных, и это имеет значение name1, name2, name3 ваш JSON должен выглядеть следующим образом :

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

Большое спасибо. Вместо списка Я должен вернуть List >. Теперь работает – skinssay

0

Уловка: Я не знаю, как отображение этого, но вы можете преобразовать его к конкретному типу (анонимно), как это (с помощью Linq):

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

вы возвращаетесь
JObject>JProperty данные
          | ---->JObject>JProperty имя
                    | ---->List<string>

Для меня один из JObject>JProperty ДОПОЛНИТЕЛЬНО, позволяет сказать, что это имя ... тогда вы, корень читателя, одобрены (данные), и поле должно также правильно отображать преобразование, которое мы сделали.

В вашем коде, вы возвращаетесь
JObject>JProperty данные
          | ---->Enumerable<{name}>

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

Примечание: Очевидно, что если вы знаете, как отображение строки непосредственно вы надеваете «нужно преобразовать его и будет лучше.

Смежные вопросы