2015-06-24 7 views
2

Я пытаюсь добавить атрибут placeholder HTML5 в Deform 2.0 TextInputWidget. Однако я не уверен, что это должно быть поддержано или как это должно поддерживаться, поскольку документация не очень понятна об этом - кажется, есть функция mask_placeholder, которая не является тем, что я хочу.Deform 2.0: Добавление HTML5 placeholder

Как добавить заполнитель HTML5 для деформирования ввода текста (2.0+)?

ответ

2

Ok - хитрость заключается в том, чтобы иметь собственный шаблон - Deform шаблонов еще не имеет поддержки заполнитель:

<!--! This adds placeholder attribute support for TextInput. 

--> 

<span tal:define="name name|field.name; 
        css_class css_class|field.widget.css_class; 
        oid oid|field.oid; 
        mask mask|field.widget.mask; 
        mask_placeholder mask_placeholder|field.widget.mask_placeholder; 
        style style|field.widget.style; 
        placeholder field.widget.placeholder|nothing; 
        type field.widget.type|'text'; 
" 
     tal:omit-tag=""> 
    <input type="${type}" name="${name}" value="${cstruct}" 
      tal:attributes="class string: form-control ${css_class}; 
          style style; 
          placeholder placeholder;" 
      id="${oid}"/> 
    <script tal:condition="mask" type="text/javascript"> 
     deform.addCallback(
     '${oid}', 
     function (oid) { 
      $("#" + oid).mask("${mask}", 
       {placeholder:"${mask_placeholder}"}); 
     }); 
    </script> 
</span> 

И тогда вы можете определить свой виджет как:

class InviteFriends(CSRFSchema): 

    email = c.SchemaNode(
     c.String(), 
     missing=None, 
     validator=c.Email(), 
     widget=w.TextInputWidget(template="textinput_placeholder", type="email", placeholder="Friend's email"), 
    ) 

    phone_number = c.SchemaNode(
     c.String(), 
     missing=None, 
     validator=c.Length(min=7), 
     widget=w.TextInputWidget(template="textinput_placeholder", type="tel", placeholder="Friend's phone number"), 
    )