2

この質問は、@ nils のおかげでこの問題を解決した後に出てきました。誰かが私を助けてくれることを願っています!

実際、レコードのリストがあり、そのうちのいくつかを選択して、ワンクリックで削除できます。

上記のコードは正常に機能していますが、私が行っていることが正しいかどうか、またはいつでも壊れる可能性があるかどうかはわかりません!

そこで、Array.filter() 内のレコードを削除するために HTTP リクエストを実行しています... そうですか? 私はそれがまったく正しくないと感じています!

deleteSelected() {
  this.list = this.list.filter(function(val, i) {
    var id = val.id.toString();

    if (this.selected.indexOf(id) === -1) {
      return true;
    } else {

      this.$http.delete('/sources/' + id)
        .then(function() {
          return false;
        }, function() {
          return true;
        });

    }
  }, this);

  this.selected = [];
},

配列this.listはオブジェクトのリストの場所であり、this.selected配列には削除するために選択された ID が含まれています。

次に、HTTP リクエストが正常に処理された場合は obj を削除し、そうでない場合は保持します。

それを行うにはどうすればよいと思いますか。

- - - - -編集 - - - - -

JSBin を追加して、必要なものを明確にします!

実際、スクリプトに問題が見つかりました...配列からアイテムを削除するためのajax応答を待たないため、それらのレコードの一部を削除できなかった場合、配列からも削除されます

誰か?

JSビン

4

2 に答える 2

0

私はそのコードが機能しないと思っていましたが、良い解決策を見つけました!

一括削除であるため、機能していません。各削除は 1 つの要求ですが、一度に全員を作成したため、スクリプトはリストから項目を削除するための応答を待ちません! 何らかの検証によってレコードが削除されない場合は、リストからも削除されます!

だから私がしたことは、すべての削除リクエストを送信し、最後のリクエストが終了したら、リスト全体を更新するために新しいリクエストを作成することです!

コードは次のとおりです。

// block the records list
$(this.$els.dataGrid).block();

// init a counter
var itemsProcessed = 0;

// get length of records to be deleted
var length = this.selected.length;

// looping to delete one for each
this.selected.forEach((item) => {

  // removeLossReasonById() is a method that mand the HTTP DELETE request and then()
  this.removeLossReasonById(item).then((response) => {

    // if does not delete for any reason show a notify
    if (!response.ok)
      $.Notification.error(response.data);

    // increment the counter
    itemsProcessed++;

    // if is the last iteration it's gonna unblock the records list and clear my array of items to be removed
    if (itemsProcessed === length) {
      this.selected = [];
      this.getLossReasons().then(() => $(this.$els.dataGrid).unblock());
    }
  });
});

それが誰かを助けることを願っています!

于 2016-04-14T00:42:26.627 に答える