0

ノックアウト (および mvc) と組み合わせてブートストラップ コンボボックス プラグインを使用することに関して質問があります。

テンプレートで Dropdownlisfor、textboxfor などの既製の MVC html ヘルパーを使用している状況があります。Knockout を使用して、データのコレクションをテンプレートにバインドしています。mvc html ヘルパーは、DropDownlistfor ヘルパーの「選択」コントロールを作成します。必要なすべての検証属性などが設定されるように、コントロールでブートストラップ プラグインを呼び出す前に、これをレンダリングする必要があります。私は最初に afterrender を使用し、そのメソッドで「選択」コントロールを見つけ、その上でプラグインを呼び出しました。

私たちの問題は、ブートストラップ コンボボックス コントロールを別の場所で同様の方法で使用する必要があるたびに、これを実行したくないということです。そのため、私はカスタム バインディングについて調査しており (最初に行っておくべきでした)、自分の状況でカスタム バインディングを使用する方法について質問がありました。

彼がブートストラップ タイプ ヘッド コントロールのカスタム バインディングを作成したこの記事を見つけました。コンボボックスに似たものを作ることができます。ただし、コントロールがレンダリングされた後にのみ呼び出すことができます。では、KO を指定して、すぐにではなくカスタム バインディングの「afterrender」のみを実行する方法はありますか。このようにして、選択コントロールがレンダリングされ、選択コントロールのカスタム バインディングでプラグインを呼び出すことができます。

ここにいくつかの詳細情報があります。

テンプレートを使用するテーブルがあります

<table>
        <tbody data-bind='template: {name: "editorRowTemplate", foreach: rules, afterRender: function(data) {{$root.view.templateRendered(data) } }'>   </tbody>
</table>

これに似たテンプレートがあります

<script id="editorRowTemplate" type="text/html">

    <tr class="dataRow" data-bind="attr: { id: 'EditorRow' + $index() }">
        <td>
            <div class="editor-field">
                @Html.KnockOutDropDownListFor(rule => ruleTemplate.ReserveWordId, new List<SelectListItem>(), null,
                                                   new { @class = "combobox", data_bind = "options: $root.ReserveWords, optionsText:'Name', optionsValue:'ReserveWordId', attr : {id: $index(), name: $index()}" }, ((int)this.Model.Prefix).ToString())

                @Html.KnockOutValidationMessageFor(rule => ruleTemplate.ReserveWordId, "*", new { data_bind = "attr : { 'data-valmsg-for': $index()}" }, ((int)this.Model.Prefix).ToString())
            </div>
        </td>
    </tr>
</script>

指定された KO バインディングで選択コントロールを生成する独自の html ヘルパー (KnockoutDropDownListFor など) があります。

どのような方法がよいか提案してください。さらに情報が必要な場合はお知らせください。

4

1 に答える 1

0

質問を完全に理解しているかどうかはわかりません。ただし、MVC ヘルパーがレンダリングされるのを待つ必要はありません。これはサーバー側で発生し、ノックアウトはクライアント側で発生するためです。

$(document).ready(function() {...}); も使用できます。何かをする前にDOMがロードされていることを確認したい場合。

于 2012-11-28T19:57:51.673 に答える