0
ASP.NET MVCプロジェクトでbootstrap dual listbox plugingを使用しています。
私もプロジェクトでKnockoutを使用しています。私はbindingHandler
を作成して、このプラグインがノックアウトとスムーズに動作するようにしようとしています。ここ ブートストラップデュアルリストボックスノックアウトバインド
はHTML
<select class="form-control" data-bind="foreach:{data: EditedElement().Operations, as : 'op'} , dualList: EditedElement().Operations" multiple>
<option data-bind="value: op.OperationID(), text: op.Name(), selected: op.IsSelected()"></option>
</select>
ビューモデル
0をハンドラko.bindingHandlers.dualList = {
init: function (element, valueAccessor) {
$(element).bootstrapDualListbox({
selectorMinimalHeight: 160
});
$(element).on('change', function() {
$(element).bootstrapDualListbox('refresh', true);
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).bootstrapDualListbox('destroy');
});
},
update: function (element, valueAccessor) {
$(element).bootstrapDualListbox('refresh', true);
}
}
をバインドしようとしたものです
私の問題はです。私はviewModel observableArray
とプラグインの間で同期をとれません。 つまり、ビューモデルプロパティに反映されるプラグイン(ユーザーがいくつかのオプションを削除またはいくつかのオプションを削除した)を変更したい場合は、
それはそれをチェックし、そのチェックに応じて答えを受け入れると便利だろうね。ありがとうございました –
'選択された' observableは 'バインディングハンドラの外でクエリを実行するとき' undefinedです.'その可能性のある原因を知っていますか? –
ありがとうございます、これは問題を解決しましたが、私はあなたのコードに2つの修正を加えたと言わねばならなかった*これは他の人があなたの答えを準備するのに役立つかもしれない* **最初の修正**は ' 'observableArray' ** **第2の変更**ステートメント' var data = ko.utils.unwrapObservable(valueAccessor()); 'を' change'イベントの中に移動する必要がありました。これは、前に述べたように、モデル自体からこのプロパティを読み取ろうとするときにnullを受け取っていたので、 'binding'ハンドラの外側から' selected'プロパティを読み取ることができるようにするために非常に重要でした。 –