Extjs store reader полностью определил имена свойств json - PullRequest
1 голос
/ 05 декабря 2010

Используя Extjs 3+ и серверная часть отправляет обратно следующий JSON:

{"com.klistret.cmdb.ci.pojo.QueryResponse": {"com.klistret.cmdb.ci.pojo.successful":true,"com.klistret.cmdb.ci.pojo.count":1,"com.klistret.cmdb.ci.pojo.elements":{"com.klistret.cmdb.ci.pojo.id":123,"com.klistret.cmdb.ci.pojo.name":"Mars","com.klistret.cmdb.ci.pojo.fromTimeStamp":"2010-07-08T16:38:00.478+02:00","com.klistret.cmdb.ci.pojo.createTimeStamp":"2010-07-08T16:38:00.478+02:00","com.klistret.cmdb.ci.pojo.updateTimeStamp":"2010-10-25T15:02:09.446+02:00","com.klistret.cmdb.ci.pojo.type":{"com.klistret.cmdb.ci.pojo.id":1,"com.klistret.cmdb.ci.pojo.name":"{http:\/\/www.klistret.com\/cmdb\/ci\/element\/logical\/collection}Environment","com.klistret.cmdb.ci.pojo.fromTimeStamp":"2009-08-05T11:20:12.471+02:00","com.klistret.cmdb.ci.pojo.createTimeStamp":"2009-08-05T11:20:12.471+02:00","com.klistret.cmdb.ci.pojo.updateTimeStamp":"2009-08-05T11:20:12.471+02:00"},"com.klistret.cmdb.ci.pojo.configuration":{"@www.w3.org.2001.XMLSchema-instance.type":"com.klistret.cmdb.ci.element.logical.collection:Environment","@Watermark":"past","com.klistret.cmdb.ci.commons.Name":"Mars"}}}}

Считыватель настроен следующим образом:


    var reader = new CMDB.JsonReader(
            {
            totalProperty       : 'com.klistret.cmdb.ci.pojo.count',
                successProperty     : 'com.klistret.cmdb.ci.pojo.successful',
                idProperty          : 'com.klistret.cmdb.ci.pojo.id',
                root                : 'com.klistret.cmdb.ci.pojo.elements'
            }, 
            [
            {name: 'Id',   mapping: 'com.klistret.cmdb.ci.pojo.id'},
                {name: 'Name', mapping: 'com.klistret.cmdb.ci.pojo.name'}
            ]
        );

Магазин как:


    var ds = new Ext.data.Store({
            proxy      : new Ext.data.ScriptTagProxy({
                url    : 'http://sadbmatrix2:55167/CMDB/resteasy/element'
            }),

            reader     : reader 
        });

Считыватель расширяет Ext.data.JsonReader, как объяснено http://erichauser.net/2007/11/07/more-wcf-json-and-extjs/, для удаления начального узла com.klistret.cmdb.ci.pojo.QueryResponse в JSON, возвращенном с сервера.

Расширенный читатель никогда не вызывается. Предполагая, что проблема связана с полностью определенными именами свойств в возвращаемом объекте JSON (т. Е. "Com.klistret.cmdb.ci.pojo.name", а не просто "name").

Кто-нибудь может обойтись?

1 Ответ

2 голосов
/ 08 декабря 2010

Мы решили это (ну, в основном, Матфей) в комментариях:

ScriptTagProxy требует, чтобы сервер упаковывал данные JSON в вызов функции, чтобы ваш локальный код мог получить к ним доступ.

Вместо того, чтобы сервер излучал что-то вроде:

{here:'is data}

нужно вернуть

somefunc("{here:'is data'}");

Таким образом, ваша клиентская реализация somefunc() вызывается и может обрабатывать возвращенные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...