1

グリッドにレンダリングされる observableArray があります。ユーザーが行をクリックすると、ダイアログ フォームがポップアップ表示され、ユーザーは選択した項目を編集できます。ユーザーが変更を更新またはキャンセルできるようにしたいのですが、選択したレコードは監視可能であるため、変更はすぐに行われます。

ユーザーが「更新」をクリックしたときにのみデータが更新されるように、選択したレコードを observableArray から分離するにはどうすればよいですか?

これが私の問題の簡略版です-私のフィドル

function Type(data) {
    this.id = data.id;
    this.name = ko.observable(data.name);
};

function Location(data) {
    this.id = data.id;
    this.name = ko.observable(data.name);
    this.state = ko.observable(data.state);
    this.headline = ko.observable(data.headline);
    this.type = ko.observable(new Type(data.type));
};

function ViewModel() {
    var self = this;

    self.types = types;
    self.locations = ko.observableArray(ko.utils.arrayMap(seedData, function(item) {
        return new Location(item);
    }));
    self.selectedLocation = ko.observable();

    self.edit = function(item) {
        self.selectedLocation(item);
    };

    self.cancel = function() {
        self.selectedLocation(null);
    };

    self.update = function(item) {
        //do something here to push updated Location to locations observableArray
    };
}
4

1 に答える 1

4

あなたの構造は、上記のコメントにリンクされている記事で説明したタイプのエディター パターンとかなりよく一致していると思います: http://www.knockmeout.net/2013/01/simple-editor-pattern-knockout-js .html

データの場合、これは、選択したアイテムのデータを使用して新しく作成された aselectedItemおよび aを追跡することを意味します。selectedItemForEditingLocation

ユーザーがキャンセルした場合は、破棄できます。ユーザーが同意すると、編集したアイテムのデータを取得して、元の選択したアイテムに適用できます。

この記事では、Observable の作成とデータの取り込みを分離することについて説明しているため、いつでもupdateクリーンなデータを使用してメソッドを呼び出して適用できます。

これらの手法で更新されたフィドルは次のとおりです。http://jsfiddle.net/rniemeyer/JQkVs/

于 2013-03-29T16:04:44.570 に答える