ノックアウト (および 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 など) があります。
どのような方法がよいか提案してください。さらに情報が必要な場合はお知らせください。