Загрузка данных в модель с помощью id-Extjs

я пытаюсь использовать прямое хранилище в Extjs
вот код для моего магазина

Ext.define('IDE.store.Files', {
    extend: 'Ext.data.Store',
    proxy: {
        type: 'direct',
        api: {
            create:Files.AddNew,
            read:Files.GetFile,
            update:Files.Update,
            destroy:Files.Delete,
            //load:Files.GetFile
        },
        paramOrder:'Path'
    },
    model:'IDE.model.File'
})

код для модели

Ext.define('IDE.model.File', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'Path', type: 'string' },
        { name: 'Name', type: 'string' },
        { name: 'Extention', type: 'string' },
        { name: 'Content', type: 'string' }
    ],
    idProperty:'Path',
    store:'IDE.store.Files'
})

как видите, idProperty равно Path
следующий сегмент кода выдает ошибку

//this.getStore('IDE.store.Files').load(path, { sucess: function (file) {
//                console.log(file.get('Content'));           
//            } });
this.getStore('IDE.store.Files').load(path);

здесь я получаю path откуда-то и пытаюсь загрузить файл по определенному пути, ошибка

 Ext.data.proxy.Direct.doRequest(): No direct function specified for this proxy

теперь проблема в том, что документации extjs недостаточно, и везде, где я искал, я мог видеть только 4 API в объекте api proxy. Что такое
1.create
2.read
3.update
4.destroy

какой API мне не хватает? ИЛИ
где мне нужно указать прямую функцию для load()


person Parv Sharma    schedule 13.06.2012    source источник
comment
Какую именно версию ExtJS вы используете? Потому что параметры, которые вы указываете для load(), кажутся неверными. Так же можно убрать load:config из апи: - не поддерживается.   -  person Izhaki    schedule 13.06.2012
comment
ой, это было потому, что я что-то пытался .. теперь я отредактировал вопрос, чтобы отразить точную ситуацию   -  person Parv Sharma    schedule 13.06.2012
comment
Какая версия на EXT? 4.0.7? 4.1?   -  person Izhaki    schedule 13.06.2012
comment
Хотя я думаю, что это проблема, я считаю, что правильные параметры load() должны выглядеть так: this.getStore('IDE.store.Files').load( { params: {path: 'somepath' } } ). Вы можете подтвердить, что это все еще не работает?   -  person Izhaki    schedule 13.06.2012
comment
Я думаю, причина этого в том, что ExtJS ищет прокси в модели. Почти уверен, что ваш код будет работать с 4.1. В любом случае, не могли бы вы попробовать переместить определение прокси в модель и посмотреть, работает ли оно?   -  person Izhaki    schedule 13.06.2012


Ответы (1)


есть несколько проблем, которые я мог решить с помощью своего кода, поэтому просто поместил здесь для помощи сообществу.
1. способ, которым я вызывал функцию загрузки, правильный.. и он просто принимает параметр, а целый объект с область действия и обратный вызов, поэтому, возможно, это была ошибка, говорящая http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.Store-method-load
2. если я просто удалю api.. и используйте параметр конфигурации directFn, тогда он работает..

Код:

Ext.define('IDE.store.Files', {
    extend: 'Ext.data.Store',
    proxy: {
        type: 'direct',
        directFn: Files.GetFile, // <--- new line of code
        api: {
            create:Files.AddNew,
            //read:Files.GetFile, // <--- old line of code
            update:Files.Update,
            destroy:Files.Delete
        },
        paramOrder:'Path'
    },
    model:'IDE.model.File'
})
person Parv Sharma    schedule 18.06.2012
comment
Я добавил код, чтобы следующий читатель мог увидеть, как он выглядит. - person MacGyver; 18.03.2014