2016-07-28 33 views
1

动态型我有SmartGWT的DynamicForm用的FormItem变化形式项目编辑器中SmartGWT的

FormItem item = createTextItem();   
form.setFields(item); 

创建和设置字段后,我需要动态设置的项目编辑器类型。我必须根据一些条件动态地做到这一点。

我打电话给item.setEditorType(new PasswordItem()); 我刚打电话form.editRecord(record);,以便出现新的编辑器类型。但它不起作用。
尝试致电item.redraw()并且无法正常工作。

我的目标是根据编辑的记录动态设置编辑器类型。请帮助。

回答

1

尝试使用自定义数据绑定(see page 23了解更多详情)。您尝试的操作不起作用,AFAIK,因为ListGridField已使用初始自定义编辑器创建,并且不能使用setEditorCustomizer动态更改。

看一下这个示例(基于this展示演示),它可以在DynamicForm中编辑密码时做你想做的事情,并且保存更改后(请注意评论,因为没有一些这些设置它不会按预期工作):

public void onModuleLoad() { 

    final DataSource dataSource = ItemSupplyLocalDS.getInstance(); 

    final DynamicForm form = new DynamicForm(); 
    form.setIsGroup(true); 
    form.setNumCols(4); 
    form.setDataSource(dataSource); 
    // very important for not having to set all fields all over again 
    // when the target field is customized 
    form.setUseAllDataSourceFields(true); 

    final ListGrid listGrid = new ListGrid(); 
    listGrid.setWidth100(); 
    listGrid.setHeight(200); 
    listGrid.setDataSource(dataSource); 
    listGrid.setAutoFetchData(true); 

    IButton editButton = new IButton("Edit"); 
    editButton.addClickHandler(new ClickHandler() { 
     public void onClick(ClickEvent event) { 
      form.editRecord(listGrid.getSelectedRecord()); 
      // when the button is clicked, the password field is rendered with 
      // a plain text item editor, for easy verification of values entered 
      FormItem passwordField = new FormItem("passwordFieldName"); 
      passwordField.setEditorProperties(new TextItem());    
      form.setFields(passwordField); 
      form.markForRedraw(); 
     } 
    }); 

    IButton saveButton = new IButton("Save"); 
    saveButton.addClickHandler(new ClickHandler() { 
     public void onClick(ClickEvent event) { 
      form.saveData(); 
      // when the button is clicked, the password field is rendered with 
      // a password editor, for added privacy/security 
      FormItem passwordField = new FormItem("passwordFieldName"); 
      passwordField.setEditorProperties(new PasswordItem());    
      form.setFields(passwordField); 
      form.markForRedraw(); 
     } 
    }); 

    VLayout layout = new VLayout(15); 
    layout.setWidth100(); 
    layout.setHeight100(); 
    layout.addMember(listGrid); 
    layout.addMember(editButton); 
    layout.addMember(form); 
    layout.addMember(saveButton); 
    layout.draw(); 
} 
+0

现在它的工作。 SmartGwt一旦设置为表单,就不会渲染对FormItem所做的任何更改。但是,当我对FormItem进行更改并且再次使用'form.setFields(passwordField);'设置formItem时,它就起作用了。 谢谢。 –