2015-03-07 3 views
1

Say I построить форму, используя SQLFORM.factory так:Условные поля для SQLFORM.factory в web2py

my_fields = [Field('field1', default='some value'), 
      Field('field2', default = 'some other value')] 
form = SQLFORM.factory(*my_fields) 

Теперь я хочу, чтобы показать field2 только если field равно какое-то значение. Однако, когда я пытаюсь сделать что-то вроде:

my_fields[1].show_if = my_fields[0] == 'some value' 

(прежде чем я на самом деле сделать завод) я получаю:

File "/Applications/web2py.app/Contents/Resources/gluon/packages/dal/pydal/objects.py", line 1202, in __eq__ 
    return Query(db, db._adapter.EQ, self, value) 
AttributeError: 'NoneType' object has no attribute '_adapter' 

Я думаю, что show_if не работает, потому что это запрос, и Я на самом деле не использую таблицу ... но у меня нет таблицы, поэтому я использую SQLFORM.factory. Любые предложения о том, как сделать поле условным в этом случае?

ответ

3

OK Я понял.

Если вы изучите источник страницы в форме SQLFORM.factory, вы заметите, что указанные идентификаторы: "no_table_field1" и "no_table_field2". Так, кража заимствование код с JQuery Ajax & главы web2py книги, я добавляю это к концу соответствующего зрения:

<script> 
jQuery(document).ready(function(){ 
    if(jQuery('#no_table_field1').prop('value') == 'some value') 
     jQuery('#no_table_field2__row').show(); 
    else jQuery('#no_table_field2__row').hide(); 
    jQuery('#no_table_field1').change(function(){ 
     if(jQuery('#no_table_field1').prop('value') == 'some value') 
      jQuery('#no_table_field2__row').show(); 
     else jQuery('#no_table_field2__row').hide();}); 
}); 
</script> 

и это прекрасно работает. (Не плавный переход, но он работает.)

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