1

工場の建物の大画面ディスプレイに使用され、一連のマシンのステータス情報とパフォーマンスインジケーターを表示する、シングルページアプリケーションのソリューションを作成しました。アプリケーションは、ajax呼び出しを介して派生した設定ファイルを介して、どのマシンにどの情報を表示するかを認識します。したがって、すべてのマシンに対してテンプレートが作成され、各マシン情報に対してネストされたテンプレートがレンダリングされます(koExternaltemplateengine)。また、最初のajax呼び出しには、すべてのマシンのajax呼び出しのURLが含まれています。これらの呼び出しの応答には、マシン固有の値が含まれています。これらの呼び出しは定期的に繰り返され、表示値が更新されます。すべてのバインディングは、ハードコードされたビューモデルのクライアント側を回避するために、ノックアウトとマッピングプラグインを使用して作成されます。

今私の問題:すべてのマシンのすべてのajax呼び出しがディスプレイに必要なデータを配信する場合、すべてが正常に機能します。ただし、一部のマシンでは、場合によっては(初期ロード時も)、呼び出しは成功しますが(200)、nullのみが含まれます(現時点ではデータが利用できないため)。今、私は問題を抱えています。ko.applybindings(machinedata、machinediv)の後で、「バインディングを解析できません」というメッセージが表示されました。バインドされた値フィールドの場合、koはバインドを終了します。そのため、表示は完全にはレンダリングされず、更新はトリガーされません。

ここで、if / ifnot-bindingsを使用して何かを試しますが、更新後に初期のバインドされていない値が存在する場合はどうなりますか?(ko.mapping.fromJS ??に加えて、手動でapplybindingsを再トリガーします)。

誰かが同様の問題を抱えていましたか?助言がありますか?私が述べたように、より多くのマシン属性の将来の拡張を容易にするために、ハードコードされたビューモデルを避けたいと思います。

4

1 に答える 1

0

マシンデータをオブザーバブルに保存できます。

あなたの見解:

<div data-bind="if: machinedata()>
   <div data-bind="with: machinedata()">
      ...
   </div>
</div>
<div data-bind="if: machinedata()>
   Data could not be loaded....
</div>

ビュー モデル:

var ViewModel = function () {
    var self = this;

    self.machinedata = ko.observable();

    self.update = function () {
        var data = someAjaxCall(); // returns the data or any falsy value
        self.machinedata(data);
    };
}

var viewModel = new ViewModel();
ko.applyBinding(viewModel);  // data does not yet exist
viewModel.update();

ロードされたデータのみをバインドし、計算を必要としない限り、ko.mapping は必要ありません。

于 2013-02-08T20:37:45.817 に答える