2013-08-01 3 views
5

Я хотел бы подклассифицировать модель, которую я создал с помощью Sencha Architect. Скажем, у меня есть модель под названием BaseModel, которую я уже создал, и мне нужно создать другую модель, назовите ее MyModel, которая расширяет BaseModel. В коде, это будет выглядеть примерно так:Sencha Architect: Подклассификация модели

// BaseModel.js 
Ext.define('MyApp.model.BaseModel', { 
    extend: 'Ext.data.Model', 

    fields: [...] 
}); 

и

// MyModel.js 
Ext.define('MyApp.model.MyModel', { 
    extend: 'MyApp.model.BaseModel', 

    fields: [...] 
}); 

Я новичок в ExtJS и Сенча архитектор, но это то, что это так просто сделать в коде и так важно для надлежащего который, я полагаю, должен быть способ сделать это в Архитекторе. К сожалению, я не мог понять, как это сделать легко. После некоторого копания я нашел это в документации Сенча, http://docs.sencha.com/architect/2/#!/guide/classes, в котором говорится следующее под заголовком «Пользовательские классы»:

Хотя описанные выше функции позволяют создавать классы из поддерживаемых элементов в панели инструментов, иногда вам может потребоваться создать простой класс без родителя или класс, который расширяет другой класс, который не отображается в панели инструментов. Вы можете сделать это в Архитекторе, используя элемент «Класс» в панели инструментов.

Хорошо, звучит многообещающе - поэтому я попробовал это. В инспекторе проекта я попал в знак плюса, отправился в «Класс» и в рамках этого «Модель». Итак, теперь у меня есть собственный класс Model в моем проекте. Я называю это MyModel, и я установил конфигурацию «extend» как MyApp.model.BaseModel. Итак, теперь, по крайней мере, код верен и выглядит так, как у меня выше. Тем не менее, архитектор, похоже, не знает, что класс MyModel является моделью, хотя он сидит в разделе «Модель» моего инспектора проектов и расширяет BaseModel. Он не имеет никаких свойств конфигурации модели, таких как «поля», которые мне нужно указать, и я не могу связать MyModel с любым типом Магазина. Другими словами, Architect обрабатывает MyModel как полностью настраиваемый класс и не демонстрирует поведения модели. Это в основном делает этот способ подкласса совершенно бесполезным - я могу подклассифицировать модель, но тогда я не могу использовать ее как модель в любом месте моего проекта, так что в чем смысл?

Итак, вопрос в том, как я могу заставить архитектора обрабатывать MyModel как фактическую модель? Разве это не правильный подход к подклассу в Architect? Я только начинаю свой проект, но я предвидел необходимость подкласса очень часто, будь то модели, контроллеры, магазины и т. Д., И если я не могу сделать это с Architect, это серьезное ограничение.

+0

, как решить это ?? –

ответ

0

Вы делаете все правильно. Архитектор в своей нынешней форме «работает» таким образом, но есть еще один, который, я думаю, обеспечит лучшие результаты.

Попробуйте использовать традиционную модель и использовать createAlias ​​с UserAlias, установленной на базе модели аки xtype

+0

Вы хотите установить userAlias ​​в базовом классе или на основе? Как устанавливается базовая/производная связь? – matejk

0

я испытал тот же вопрос, который был бы прерывателем сделки с точкой зрения использования архитектора.

Я был в состоянии работать вокруг него путем создания пользовательского класса, расширение существующей модели, а затем создать пользовательские свойства на новый класс: «поля», «hasMany», «прокси» и т.д.

Вы может задавать свойства для ввода массива или объекта, который затем позволяет редактировать поля в редакторе кода.

Это не идеальное решение, так как архитектор не распознает класс как модель и, следовательно, вы не можете перетаскивать поля и т. Д.

Однако полученный код является верным модели, созданной изначально.

Надеется, что это помогает, Бен

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