Добавление пользовательских записей в хранилище данных JSON для комбинированного списка (ExtJS) - PullRequest
0 голосов
/ 19 августа 2010

У меня есть хранилище данных JSON, используемое для выбора в выпадающем списке, которое работает нормально, однако я хочу добавить пользовательскую запись в выпадающий список, и она не работает. Вот мой код:

Примечание. Я удалил часть кода, чтобы его было легче читать.

var ds = new Ext.data.Store({
        proxy: new Ext.data.ScriptTagProxy({
            url: 'ajax.aspx?type=CR'
        }),
        reader: new Ext.data.JsonReader({
            root: 'topics',
            totalProperty: 'totalCount',
            id: 'clientId'
        }, [
            {name: 'name', mapping: 'clientName'},
            {name: 'address', mapping: 'clientAddress'}
        ])
    });

    // add the Other record

    // create a Record constructor from a description of the fields
    var TopicRecord = Ext.data.Record.create([ // creates a subclass of Ext.data.Record
        {name: "id"}, 
        {name: 'name'}, 
        {name: 'address'}
    ]);

    // create Record instance
    var myNewRecord = new TopicRecord({
        id: Ext.id(), 
        name: 'Other',
        address: 'Other'
    });

    ds.add(myNewRecord);
    ds.commitChanges();

    var carrierSearch = new Ext.form.ComboBox({
        // removed some code here
        onSelect: function(record){ 
            carrierSearch.setValue(record.data.name);
            document.getElementById(carrierIdHidden).value=record.id;
            fieldOnBlurPost(document.getElementById(id), page, true);
            carrierSearch.collapse();
        }
    });

Есть идеи, почему в разделе "// добавить другую запись" (вплоть до ds.commitChanges ();) моя пользовательская запись не добавляется?

Спасибо

Доменик

Ответы [ 3 ]

2 голосов
/ 20 августа 2010

Прежде всего я хотел бы сказать O- H !!

Из документации ExtJS для data.Store.add:

add (Ext.data.Record [] records): пусто Добавить записи в магазин и запускает событие добавления. Чтобы добавить Записи в хранилище из удаленного источника, используйте load ({add: true}). Смотрите также recordType и вставьте.

Я предполагаю, что ваш ComboBox использует режим: 'remote'. Я считаю, что вам нужно будет использовать метод load и передать ему {add: true} там.

1 голос
/ 23 августа 2010

Когда я добавил запись в хранилище данных, она работала:

var ds = new Ext.data.Store({
        proxy: new Ext.data.ScriptTagProxy({
            url: 'ajax.aspx?type=CR&searchtype=begins'
        }),
        reader: new Ext.data.JsonReader({
            root: 'topics',
            totalProperty: 'totalCount',
            id: 'clientId'
        }, [
            {name: 'name', mapping: 'clientName'},
            {name: 'address', mapping: 'clientAddress'}
        ]),
        listeners: {
                load: function() {

                    // add the Other record

                    // create a Record constructor from a description of the fields
                    var TopicRecord = Ext.data.Record.create([ // creates a subclass of Ext.data.Record
                        {name: "clientId"},
                        {name: 'name'}, 
                        {name: 'address'}
                    ]);

                    // create Record instance
                    var myNewRecord = new TopicRecord({
                        name: 'Other'
                    },'Other');

                    this.add(myNewRecord);
                    this.commitChanges();
                }
        }
    });
1 голос
/ 19 августа 2010

Я никогда не пробовал этого, но из документации я бы подумал, что вам не нужно снова создавать тип записи, используя Ext.data.Record.Create (), так как хранилище данных предоставлено для чтения, оно должно быть доступно в хранилище. , На самом деле, я предполагаю, что свойство id для типа записи создает объект записи другого типа, который не соответствует конфигурации хранилища, поэтому он вызывает сбой функции добавления.

Попробуйте что-то вроде этого:

var defaultData = {
    name: 'Other Name'
    address: 'Other Address'
};
var r = new ds.recordType(defaultData, Ext.id()); // create new record
ds.add(r);

Я основал это на примере информации, найденной в свойстве recordType класса Ext.data.Store http://dev.sencha.com/deploy/dev/docs/?class=Ext.data.Store

...