如何附加" onchange" Wagtail的ChoiceBlock的事件处理程序,用于更新其他输入表单

时间:2017-03-29 05:29:23

标签: python django wagtail

我终于附上了" onchange" Wagtail ChoiceBlock的事件处理程序,不使用小部件。

以下是方法。

class CodeChoiceBlock(ChoiceBlock):
    def __init__(self, choices=None, default=None, required=True, help_text=None, **kwargs): 
        super(CodeChoiceBlock, self).__init__(choices=choices, 
                                              default=default, 
                                              required=required, 
                                              help_text=help_text, 
                                              **kwargs)
        self.field.widget.attrs.update({'onchange': 'update_mode(this)'})

update_mode()是一种javascript方法,用于在ChoiceBlock的值更改时更新textarea的模式。

  

我保留下面的问题

我正在尝试附加一个" onchange" Wagtail的ChoiceBlock的事件处理程序。

目的是更新textarea的codemirror模式。

我创建了一个名为CodeSelectWidget的小部件,它继承了WidgetWithScriptwidgets.Select

我使用以下javascript覆盖render_js_init方法。

def render_js_init(self, id_, name, value):
    jsinit = """
        code_choice_{varname!s} = document.getElementById("{id!s}").onchange(function() {{
            var code_text_area = document.getElementById("{code_id!s}");
            var code_text_editor = window.{code_editor!s};
            code_text_area.text();
            code_text_editor.setOption(
                "mode",
                {mode!s}
            );
        }})
    """
    return jsinit.fromat(varname=id_to_var_name(id_),
                         id=id_, 
                         code_id=str(id_).replace('language','code'), 
                         code_editor=find_code_editor(id_),
                         mode=codemapper[value])

然后我创建了一个名为CodeChoiceBlock的自定义选择块,它继承了ChoiceBlock

我覆盖field方法并将'widget': CodeSelectWidget()添加到field_kwargs,如下所示

def field(self):
    field_kwargs = {
        'widget': CodeSelectWidget(),
    }
    field_kwargs.update(self.field_options)
    return forms.ChoiceField(**field_kwargs)

但是,当我更改选择输入的值时,没有任何反应。并且没有任何错误消息。

0 个答案:

没有答案