2012-01-27 2 views
0

Я хочу иметь возможность отображать сетку, пока количество дополнительных столбцов неизвестно до тех пор, пока я не окажусь в методе onRender() на основе типа определенных данных.Как связать индексированные поля DataModel с гибкой сеткой

У меня есть этот класс

ActivityModel extends BaseDataModel { 
    // defines all common setXXX and getXXX needed 
} 

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

Мой вопрос: Есть ли способ иметь вид проиндексированных полей в пределах AcitivityModel, чтобы иметь возможность сделать следующее? : Акцент на col.setId("{indexed}");

 List<ActivityParameterModel> parameters = folderModel.getParameters(); 
    for (ActivityParameterModel param : parameters) { 
     ActivityParamType paramType = param.getParamType(); 
     col = new ColumnConfig(); 
     col.setHeader(param.getParamName()); 
     col.setWidth(2); 
        // 
        // the following line is what I'm expecting to do 
     col.setId("{indexed}"); 
     switch (paramType) { 
     case N: 
      NumberField nf = new NumberField(); 
      nf.setPropertyEditorType(Integer.class); 
      col.setEditor(new CellEditor(nf)); 
      break; 
     case S: 
      TextField<String> tf = new TextField<String>(); 
      col.setEditor(new CellEditor(tf)); 
      break; 
     } 
     config.add(col); 

ответ

0

вот что я сделал, чтобы придумать ситуацию:

Я хранится в БД переменных параметров, вот сущность:

@Entity 
    @Table(name = "ACTIVITYPARAMETER") 
    public class ActivityParameter implements Serializable { 
private static final long serialVersionUID = 1L; 
@Id 
@SequenceGenerator(name = "ACTIVITYPARAMETER_IDACTIVITYPARAMETER_GENERATOR", sequenceName = "SN_ACTIVITYPARAMETER", 
    allocationSize = 1) 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ACTIVITYPARAMETER_IDACTIVITYPARAMETER_GENERATOR") 
@Column(name = "ID_ACTIVITYPARAMETER", unique = true, nullable = false) 
private Long idActivityParameter; 

@Column(nullable = false, length = 256) 
private String paramName; 

@Column(nullable = false, length = 256) 
private String paramType; 

// uni-directional many-to-one association to Activitysetting 
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "ACTIVITYSETTING_ID", nullable = false) 
private ActivitySetting activitySetting; 

@Column(name = "PARAMORDER", nullable = false) 
private Long order; 

@Column(name = "PARAMMANDATORY", nullable = false, precision = 1) 
@TypeConverter(name = "booleanToNumberConverter", dataType = BigDecimal.class, objectType = Boolean.class) 
private boolean mandatory; 

во время создания сетки, я создал фиксированные столбцы затем я сделал петлю для создания переменных параметров, используя просто набор (ParamName, DEFAULT_VALUE) следующим образом:

 // Extra Fields 
    List<ActivityParameterModel> parameters = folderModel.getParameters(); 
    int index = 1; 
    for (ActivityParameterModel param : parameters) { 
     String columnId = "param" + (index++); 
     col = new ColumnConfig(columnId, param.getParamName(), 90); 
     NumberField nf = new NumberField(); 
     col.setEditor(new CellEditor(nf)); 
     ActivityParamType paramType = param.getParamType(); 
     switch (paramType) { 
     case N: 
      nf.setValidateOnBlur(true); 
      break; 
     } 
     config.add(col); 
    } 

создает дополнительные столбцы и на время отправки, я отдыхаю перечислите значения, снова перейдя по списку параметров и вызвав get (paramName), чтобы восстановить значение.

0

Рендер сетки со стандартной конфигурацией, и когда вы знаете, как ваша сетка должна выглядеть для конкретной конфигурации, изменить его и расположение() ... быть несколько миллисекунд, то КОНЕЦ пользователь не будет затронут.

+0

Но как это сделать, когда я пришел, чтобы связать поле модели? моя модель содержит только _common fields_ и не знает дополнительных полей (дополнительные поля предназначены для отображения как TextField). Мне нужно среднее значение, сначала выведите «TextField», а затем сможете прочитать значение столбца _extra_ –

+0

. У меня возникла такая проблема, и мне удалось это сделать, установив дополнительные столбцы в сетке (я знал количество пользовательских поля, которые у меня были, но я не знал названия столбца). Для каждого дополнительного столбца я устанавливаю id от 1 до n. Имя дополнительного поля в beback_backing_ также было от 1 до n, поэтому они были связаны. После того, как привязка была готова, я установил заголовки столбцов и макета(). Надеюсь, это поможет вам. Если у меня возникла ваша проблема, это как-то связано с моей. – tartak

+0

Это то, что я сделал в качестве обходного пути, конечно, это не надежное решение. Я прочитал кучу сообщений на форуме sencha, но я не смог прийти с этим решением, они говорят о 'RowExpander' и о том, что не найдено' IdentityValueProperty', которое по-прежнему для меня является неясным классом. –