0

ノックアウト マッピング プラグインを使用したいのですが、モデルのオブジェクトをそれ自体でプロパティにする必要があります (ほとんどの場合、代替可能にする必要があるため)。

次のモデルを使用して、大幅に単純化した例を考えてみましょう。

{
  family: {
    patriarch: {
      name: "Fred Flintstone", child: "Pebbles"
    }
  },
  allPeople: [
    {name: "Fred Flintstone", child: "Pebbles"},
    {name: "Wilma Flintstone", child: "Pebbles"},
    {name: "Barney Rubble", child: "Bam Bam"}
  ]
}

選択を変更すると多くの副作用が生じる可能性がある allPeople のオプションを選択して家長を変更できるようにしたいとします。

マッピング プラグインは、すべての名前プロパティを監視可能にし、allPeople を observableArray にしますが、私の選択が適切に機能するためには、族長オブジェクト自体が監視可能である必要があります。

独自の大雑把なマッパーを作成するのは 13 行のコードだけですが、マッピング プラグインは機能が充実しているため、この一見一般的なシナリオを機能させるためのオプションまたは別の方法があることを願っています。

4

1 に答える 1

1

これはどう?選択の場合:

<select data-bind="options: allPeople, optionsText: 'name', value: family.patriarch"></select>

また、マッピングを設定するときは、族長プロパティのサブ ビュー モデルを指定するのではなく、初期データを使用してオブザーバブルを返します。

var data = {
  family: {
    patriarch: {
      name: "Fred Flintstone", child: "Pebbles"
    }
  },
  allPeople: [
    {name: "Fred Flintstone", child: "Pebbles"},
    {name: "Wilma Flintstone", child: "Pebbles"},
    {name: "Barney Rubble", child: "Bam Bam"}
  ]
};


var mapping = {
    'patriarch': {
        create: function (options) {
            return ko.observable(options.data);
        }
    }
}

var vm = ko.mapping.fromJS(data, mapping);

vm.family.patriarch.subscribe(function(value) {
    alert(ko.toJSON(value));
});

ko.applyBindings(vm);

ここでフィドル:

http://jsfiddle.net/SZXDG/6/

それは必要に応じて機能しますか?

于 2012-12-16T07:02:50.443 に答える