2

Telerik の Kendo UIから複数選択ウィジェットを破棄して再作成したかったのです。通常、これは以前に何度も行った簡単なことですが、複数選択では決して行いませんでした。私が今直面している問題は、うまくいくはずの方法です(少なくとも私はそうすべきだと思います)...そうではありません。

グリッドやドロップダウンなどのコンポーネントを破棄して再作成するために使用しているコードは次のとおりです。

if ($('#dropdown1').data('kendoDropDownList')) {
    $('#dropdown1').data('kendoDropDownList').destroy();
    $('#dropdown1').html('');
}

私が言った方法-ドロップダウンまたはグリッドで使用すると、機能します。しかし、複数選択ではそうではありません:

if ($('#multiselect1').data('kendoMultiSelect')) {
    $('#multiselect1').data('kendoMultiSelect').destroy();
    $('#multiselect1').html('');
}

動作が示されている小さなDojo の例を用意しました。ドロップダウンが破棄されて再作成されると、正しいように見えます。Multiselect に対して同じことを行うと、常に次の行としてウィジェットが追加されます。

もちろん、dataSource を変更して read メソッドなどを呼び出すだけでこの問題を克服できますが、それがバグなのか、複数選択を破棄する別の方法があるのか​​ を知りたいです。

ありがとう。

4

3 に答える 3

8

このコードは unwrap() を使用して剣道ラッパー div から元の入力を削除し、次に .remove() を使用して残りの剣道 DOM 要素を削除します。

$('html').on('click', '#destroy2', function(e){
  if ($('#multiselect1').data('kendoMultiSelect')) {
    alert('multiselect exists - destroying and recreating');

    $('#multiselect1').data('kendoMultiSelect').destroy();
    $('#multiselect1').unwrap('.k-multiselect').show().empty();
    $(".k-multiselect-wrap").remove();

    $("#multiselect1").kendoMultiSelect({
      dataSource: {
        data: ["Three3", "Four4"]
      }
    });

    $('#text2').text('Multiselect AFTER calling destroy');
  }

});

于 2016-10-19T13:02:59.540 に答える
0

コードをこれに更新しましたが、動作します:

$('html').on('click', '#destroy2', function(e){
  if ($('#multiselect1').data('kendoMultiSelect')) {
    alert('multiselect exists - destroying and recreating');
    var multiSelect = $('#multiselect1').data("kendoMultiSelect");
        multiSelect.value([]);
    $("#multiselect1").remove();
    $("#multiselect1").kendoMultiSelect({
      dataSource: {
        data: ["Three3", "Four4"]
      }
});

    $('#text2').text('Multiselect AFTER calling destroy');
  }
}); 

削除を使用すると、一度は機能します

于 2016-10-19T12:30:37.263 に答える