6

KnockoutJSで、AJAXコマンドが実行されるたびにJSONデータのobservableArrayを更新する適切な方法は何ですか?

現在、viewmodel.items([])のようなものを使用して配列をブランクにし、サーバーからのJSONデータを再入力しています。KnockoutJSマッピングプラグイン(これを行う唯一の方法である可能性があります)を使用する以外に、正しいパスは何ですか?

私のサーバーロジックは毎回同じデータの一部を送信するので、複製が必要でない限り、アイテムを繰り返して配列にプッシュすることはできません。

////今日のやり方を追加する////

なぜこのようにしているのかわかりませんが、これが私が最初に更新する方法を理解した方法です。つまり、基本的に、前に述べたように、JSONデータを取得し、それを次のようなものに渡します。

    _model.addIncident = function (json) {
       var checked = json.UserTouches > 0 ? true : false;
       _model.incidents.push({
          id: ko.observable(json.IncidentIDString),
          lastTouchId: ko.observable(json.UserLastTouchIDString),
          weight: ko.observable(json.Weight),
          title: ko.observable(json.Title),
          checked: ko.observable(checked),
          createdOn: ko.observable(json.IncidentCreatedOn),
          servicename: ko.observable(json.Servicename),
          inEdit: ko.observable(false),
          incidentHistory: ko.observableArray(),
          matchScore: ko.observable()
      });
   };

JSON配列のノードごとに。ご覧のとおり、通過するすべてのデータでビルドされるカスタムオブザーバブルがいくつかあります。これは間違った方法かもしれませんが、これまではうまく機能していました。

4

2 に答える 2

10

observableArrayは、実際には、配列操作のためのいくつかの追加のメソッドを備えた単なる通常のobservableです。

したがって、observableArrayの値を新しい配列に設定する場合は、次のようにすることができます。

viewModel.items(myNewArray)

マッピングプラグインは、配列内の既存のアイテムを更新で更新するのに役立ちます。この場合、UIは違いからのみ更新されます。

于 2012-03-19T18:06:07.760 に答える
-1

つい最近、この状況で立ち往生していることに気付いたので、私はこれに遅すぎることを知っています。回避策として、単純なJavascriptutil関数を使用できます。

すでにとしてマーク_model.incidentsを付けている場合observableArrayは、返されたJSONデータをバインドするときに次のようにすることができます。

eval("_model.incidents("+JSON.stringify(json)+");");

それは私のために働いた。次のようにオブザーバブルを作成したことを願っています。

_model.incidents = ko.observableArray([]);
于 2013-06-20T03:45:57.657 に答える