jqGrid добавить вложенный объект данных строки

#json #jqgrid

#json #jqgrid

Вопрос:

У меня есть такая модель столбца, как эта:

 ...
{name:'password',index:'password', width:100},
{name:'type.name',index:'type.name', width:100},
...
 

Мой класс, подобный definitons:

 var MyObject = function (password, type) {
    this.password = password;
    this.type = type;
};

var MyType = function (tname) {
    this.tname = tname;
};
 

Я заполняю свои переменные: вот так:

 var type = new MyType($('#typeList').val());
var myObject = new MyObject($('#password').val(), type);
 

У меня есть ответ на данные JSON с моего сервера, и некоторые из его элементов имеют тип object as like. Когда я хочу показать их в своей сетке, все в порядке. Однако, когда я хочу использовать функцию addrowdata, я ничего не вижу в type столбце. Я поступаю именно так:

 $("#gridId").jqGrid('addRowData', myObject.password, myObject, "first");
 

класс — это функция, которая содержит имя, пароль и т.д. внутри него. Проблема только с вложенными элементами (я вижу пароль и т.д. в моей сетке). addrowData функция принимает массив, но я отправляю abject, который содержит object. Как я могу преобразовать свой объект объектов в массив объектов plaint?

Есть какие-нибудь идеи?

Ответ №1:

Вы не должны использовать точки в name свойстве! При необходимости вы можете использовать if in index или in jsonmap .

Использование addRowData в вашем примере кажется мне неправильным. Вам следует перечитать документацию по методу addRowData.

Комментарии:

1. name — это поле на стороне моего сервера, и это элемент идентификатора моего объекта, поэтому я использую class.name как rowid. (Я получаю маршалированную версию JSON с сервера)

2. @kamaci: Вы должны включить в текст вашего вопроса определение jqGrid, которое вы используете. Кроме того, тестовые данные JSON, которые вы получаете с сервера, могут многое объяснить. В настоящее время вы написали: «Я ничего не вижу в type столбце» и не опубликовали определения type столбца. вместо этого используйте posted {name:'type.name',index:'type.name', width:100} , что определенно неверно, поскольку значение name свойства (‘type.name «в вашем случае) не разрешается иметь очки внутри. Вы можете попробовать с {name:'name', index:'type.name', jsonmap:'type.name', width:100} помощью .

3. спасибо за вашу помощь. Я постарался быть более понятным и подробнее объяснил свою ситуацию. Я обновил свой вопрос.

4. @kamaci: Я все еще не понимаю, что вам нужно. Я не понимаю, почему вы используете addRowData медленный метод. Более того, если вам нужно добавить строку данных и вам нужно использовать addRowData , почему вы не создаете временный простой «плоский» объект из «вложенного» объекта и не используете «плоский» объект в качестве параметра addRowData ? Код будет простым и понятным. Ни в коем случае не следует использовать name свойство, внутри которого есть точки.

5. спасибо за ваши комментарии и мнения. Данные поступают со стороны сервера и имеют поле: name . Если сервер добавляет новые данные в базу данных, я добавляю данные строки в сетку вместо перезагрузки сетки со стороны сервера. Есть ли какая-либо альтернатива addRowData ?