2

Knockout.js 、JavaScript、および Ajax を Flask-WTF (フォーム) で使用する必要があるため、サンプル コードを次に示します。

<form action="{{ url_for('post_it') }}" class="navbar-form form-inline" method="post" id="new_postform">
    {{ form.csrf_token }}
        <fieldset>
          {{ form.hidden_tag() }}

{% from "macro/_formhelpers.html" import render_field %}

            <div class="control-group">
                  <div class="controls">
                        {{ render_field(form.poster, class="form-control", size="5", placeholder="Post Anything" ) }}

                    </div>
            </div>

現在、ページの下部に切り取られた JavaScript を次のように書いています。

{% block tail_script %}
<script src="{{ url_for('static', filename='bootstrap/js/jquery.validate.js') }}"></script>
<script src="{{ url_for('static', filename='bootstrap/js/additional-methods.js') }}"></script>
<script type="text/javascript">
$(document).ready(function () {

$('#new_postform').validate({
    rules: {
        form.poster: {
            minlength: 2,
            required: true
        }
    },
    highlight: function (element) {
        $(element).closest('.control-group').removeClass('success').addClass('error');
    },
    success: function (element) {
        element.text('OK!').addClass('valid')
            .closest('.control-group').removeClass('error').addClass('success');
    }
});
});
</script>

ここで、「new_postform」という名前のフォーム ID を使用しますが、Knockoutjs では、data-bind="text: name" という種類のスニペットの下にインライン コードを記述する必要があります。

{{ render_field(form.poster,data-bind="text: name", class="form-control", size="5", placeholder="Post Anything" ) }}

しかし、これによりテンプレート エラーが発生します。Flask-WTF はデータ バインド インラインをサポートしていません。Knockoutjs の MVVM サポートを実現するには、いくつかの高度なマクロを作成する必要がありますか?

4

1 に答える 1