#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
?