2013-05-29 7 views
1

Позвольте мне объяснить мою ситуацию:ExtJS композитные поля

У меня есть модель с полем массива внутри него

Ext.define('MyModel',{ 
    extend: 'Ext.data.Model', 
    fields: [ 
    { name: 'myfield', type: 'array' } 
    ] 
}) 

, что содержание данных как этот

data = Ext.create('MyModel',{ 
    myfield: [ 'one', 'two', 'three', 'four' ] 
}) 

Я хочу продлить Ext.form.field.Base создать поле, которое обрабатывает этот массив как список дел и содержит элементы внутри себя (Ext.form.field.Trigger для добавления «todo» и Ext.ListView для отображения «todo's»).

Я не знаю, как сложно сделать Ext.form.field.Base, и содержать какие-либо более возможные решения.

Поле должно быть размером loadRecord() и указывать его на getRecord() формы.

Другие возможные решения я вижу:

1) Сделать поле только с HTML-шаблон и ванильным-JavaScript (плохой потому, почему реализовать вещи, которые уже присутствуют в ExtJS)

2) Модель отношений (плохо, потому что я должен реализовать «создавать, обновлять и удалять» для каждой связанной модели и загружать их вручную)

Благодарим вас за внимание, любые идеи приветствуются!

ответ

1

Не относится непосредственно к вашему вопросу, но «массив» не является допустимым типом поля для Ext.data.Field. Используйте «авто» для преобразования данных или просто не назначайте тип.

Re: пользовательское, сложное поле формы, это, безусловно, возможно с ExtJS, и создание расширения поля Trigger - это то, что вы хотите сделать. Вот пример настраиваемого поля триггера, который обрабатывает сложные данные: http://existdissolve.com/2012/12/extjs-4-custom-editor-for-property-grid/. Например, для настраиваемой сетки свойств, но принцип одинаков для любого пользовательского поля формы.

Наиболее важными частями в вашем настраиваемом поле будут реализация метода createPicker() и любого механизма, который вы определяете для установки значения базового поля.

Надеюсь, это даст вам хорошее место для начала.

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