3

たとえば、このフィールドがあります

Field('yourref', type='string',
          label=T('Your reference')),

これは、HTMLで入力として表示されます

<input id='table_yourref' name='yourref' value=''/>

このように見せたい

<input id='table_yourref' name='yourref' value=''/>
<a onclick='add()'>Add</a>
<a onclick='remove()'>Remove</a>

add()およびremove()は、フィールドを追加または削除するjQuery関数です。

4

1 に答える 1

2

最良の方法は、おそらくカスタムウィジェットを作成することです。

def mywidget(field, value):
    return CAT(INPUT(_name=field.name,
                     _id='%s_%s' % (field._tablename, field.name),
                     _class=field.type,
                     _value=value, requires=field.requires),
               A('Add', _onclick='add()'),
               A('Remove', _onclick='remove()'))
...

Field('yourref', type='string', label=T('Your reference'),
      widget=mywidget)

サーバー側のDOMを使用して、作成後にフォームにリンクを挿入することもできます。

form = crud.create(db.mytable)
form.element('#mytable_myfield__row .w2p_fw').append(A('Add', _onclick='add()'))
form.element('#mytable_myfield__row .w2p_fw').append(A('Remove', _onclick='remove()'))

カスタムウィジェットの利点は、db.mytableに基づいて作成されたすべてのフォームに適用されるのに対し、DOMメソッドは各フォームに個別に適用する必要があることです。

于 2012-04-09T00:48:56.213 に答える