2012-05-23 3 views
2

Я использую ExtJS 4.0.7 со своей стандартной архитектурой MVC. У меня есть сетка с пользовательскими классами store и model. Данные загружаются удаленно через store.load(). Я использую ext-dev.js для целей отладки с динамической загрузкой зависимостей.ExtJS 4 (MVC) Store не использует мой собственный класс модели

Приложение загружается нормально, без ошибок в консоли Chrome. Но проблема в том, что записи в моем магазине имеют точно такие же данные, как и мой вызов AJAX, независимо от того, какие поля у меня есть в моей модели. Я даже попытался переименовать и удалить поля, но Ext не обращает внимания.

Просмотр моего объекта store с использованием консоли показывает, что все записи имеют собственный собственный класс классов, созданный по умолчанию, с именем Ext.data.reader.Json-Modelext-gen1141. Вот суть моего кода:

Моя модель:

Ext.define('MyApp.model.FooModel', { 
    extend: 'Ext.data.Model', 

    idProperty: 'column1', 
    fields: [ 
     {name: 'column1', convert: function(value, record) { 
      return value + ' TEST-TEST-TEST'; 
     }}, 
     'column2', 
     'column3' 
    ] 
}); 

Мой магазин:

Ext.define('MyApp.store.FooStore', { 
    extend: 'Ext.data.Store', 
    model: 'MyApp.model.FooModel', 
    autoLoad: false, 
    proxy: { 
     type: 'ajax', 
     url: '/blah/blah', 
     reader: { 
      type: 'json' 
     } 
    } 
}); 

Моя сетка:

Ext.define('MyApp.view.FooGrid', { 
    extend: 'Ext.grid.Panel', 
    alias: 'fooGrid', 
    store: 'FooStore', 
    columns: [{ 
     text: 'Column 1', 
     dataIndex: 'column1', 
     flex: 1 
    },{ 
     text: 'Column 2', 
     dataIndex: 'column2', 
     flex: 1 
    },{ 
     text: 'Column 3', 
     dataIndex: 'column3', 
     flex: 1 
    }] 
}); 

Мой контроллер:

Ext.define('MyApp.controller.Foo', { 
    extend: 'Ext.app.Controller', 
    views: ['FooGridFrame'], 
    models: ['FooModel'], 
    stores: ['FooStore'], 

    init: function() { 
     this.control({ 
      'fooGrid': { 
       activate: function(grid) { 
        grid.getStore().load(); 
       } 
      } 
     }); 
    } 
}); 

Я не могу сказать, что я делаю неправильно. Есть идеи?

+0

Я нашел ответ. У моего фида данных было свойство 'metaData', определяющее конфигурации полей, и, по-видимому, Store использовал их для генерации собственной модели вместо того, что было в моем' FooModel'. Я напишу это в ответ, как только Я позволю. – curtisdf

ответ

0

Оказывается, что бэкэнд AJAX (написанный другим разработчиком для Ext3) предоставляет некоторые данные конфигурации через свойство metaData. Я не знал, что Ext Store обратил на это внимание. Моя проблема была решена путем обновления бэкэнда, чтобы опустить свойство metaData.

Возможно, он также должен был обновить metaData, чтобы предоставить соответствующую конфигурацию, в которой я нуждался, но я рефакторинг, чтобы сделать конфигурацию пользовательского интерфейса в клиенте.

Смежные вопросы