将Django-dynamic-formsets与JQuery Mobile的Radio Buttons集成

时间:2012-06-12 13:46:32

标签: jquery-mobile django-forms

我正在使用Django和django-dynamic-formset插件来生成JQuery Mobile(JQM)站点。我有嵌套的表单,允许用户单击到表单的另一行的“添加”链接。这在没有JQM的情况下工作得很好,但是当使用JQM来设置窗体小部件的样式时,单选按钮标签不会触发正确的单选按钮。

我有put up a static example of the behaviour,基于生成的HTML。单击“添加”链接,然后尝试为添加的项目选择严重性。标签的“for”属性似乎正确更新,所以我不知道我做错了什么。

django-dynamic-formset guide为我提供了一种在用户点击“添加”按钮后调用JavaScript函数的方法,但我不知道是否有一个我应该调用的JQM方法来解决问题。当我使用JQM的enhanceWithin函数时,它触发了一个页面加载,它将我的表单提交给Django,我当时不想要这个,因为表单还没有验证。

修改:我向同一网址上传了一个更好的示例。

1 个答案:

答案 0 :(得分:1)

经过充足的咖啡因和花生M& M's我已经弄明白了。

失败原因: django-dynamic-formset(DDF)插件会复制您提供的表单。但是表单按原样克隆,已包含所有JQuery Mobile(JQM)处理。这会导致JQM忽略它并使单选按钮行为不正常。

解决方案: DDF插件允许您通过其formTemplate参数指定要克隆的表单。 JQM允许您禁用某些元素的自动移动增强功能。创建表单的非增强版本,并将其作为formTemplate传递给DDF。

更多详情: 我将此编码放入我的HTML头,之前对JQM的引用:

<script>
    $(document).bind('mobileinit',function(){
        $.mobile.ignoreContentEnabled = true;   // required for using the natural forms
    });
</script>

包括这种风格隐藏我的“自然”形式:

<style>
    .natural-form { visibility: hidden; display: none; }
</style>

在Django代码中,我添加了一个<div class='natural-form>并在其中放置了我的表单的虚拟版本(确保用另一个<div>包围另一个formTemplate以供稍后参考)。在我初始化DDF时,我给它提供了唯一的ID作为{{1}}的参数。

我被告知在另一个论坛上,我将不得不破解DDF和JQM以使其工作。我对这两个库的设计印象深刻 - 足够灵活,JQuery的新手可以将所有部分放在正确的位置并从中获取一些东西。