13

サービスから取得したユーザーのリストがあります。ユーザーを選択すると、情報(メール、役割など)を表示および編集できます。問題は、これらの変更がリスト内のユーザーのデータに影響を与えたくないということです。保存(ボタンをクリック)した後にのみデータを更新したいのです。

現在、2つの変数を使用しています。

$scope.selected-現在選択されているユーザー
$scope.editable-編集中のデータを保存するための変数

そして私はこのようにデータを交換します:

$scope.initEditable = function () 
{
    $scope.editable = {};
    $.extend($scope.editable, $scope.selected);
}

ひどい解決策のように見えます。それを行うための適切な方法は何ですか?

4

1 に答える 1

15

実際、これはこの問題に取り組むための角度のある方法です。あなたは正しい方向に進んでいます。あなたのようなシナリオでは、通常、次のようになります。

  • 選択時にアイテムをコピーします(編集開始)-これはあなたが行うことですeditable
  • コピー(または元の要素)を変更する双方向データバインディングを使用する
  • 編集が完了すると、コピーからオリジナルに変更を伝播できます

このパターンの良いところは、簡単にできることです。

  • ユーザーが変更を元に戻すことができる「キャンセル」機能を提供する
  • この比較に基づいて、UIのコピーと元の部分およびドライブ部分を比較できます(たとえば、変更がない場合は[保存]ボタンを無効にすることができます)

ですから、このアプローチがひどいとはまったく思いません。私が持つことができる唯一の提案は、の代わりにangularのangular.copy 方法$.extendを使用することです。

于 2012-11-19T11:02:49.860 に答える