2

行が動的に追加されるテーブルがあります。各行のセルの 1 つに kendoSparkLine チャートが含まれています。新しい行が追加されるたびに、前の行のチャートが消え、再描画する必要があります。各行には、右側のコンテキスト (添付の画像を参照) を行を表す現在Knockoutのコンテキストに設定するクリック バインディングがあります。したがって、行を挿入した後、チャートがない各行をクリックしてクリックすると、チャートが表示されます。configuration panelViewModelcalculate

誰でもこの動作を説明できますか?

新しい行を追加するときに、既存の行のグラフが引き続き存在することを確認するにはどうすればよいですか? ループ内をトラバースViewModelsして各チャートを呼び出すことが、唯一の洗練されたソリューションですか?$.each()refresh()

kendoSparkLine チャートを含むテーブル行

4

1 に答える 1

0

$.each()質問で言及したループを、 に新しい行を追加する処理を行う関数に追加することになりましたMain ViewModelobservableArry()myの をループして、row viewmodelsそれらの関数を呼び出しcalculateます (追加したばかりのものを除く)。これはうまく機能し、それができることはわかっていました。テーブルに新しい行を追加するたびに、配列をループするのを避けたかったのです。ここにいくつかのコードがあります:

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

      // Data
      ...
      // state
      ...

     // Operations
     ...
     self.calculate = function () {
       // logic
     }

    }

    var MainVM = function () {
        var.self = this;
        ...
        // Data
        self.rowVMs = ko.observableArray([]);

        // Operations
        ...
        self.addRow() {
          var row = new rowVM();
          self.rowVMs.push(row);
          self.setCurrentRow(row);

          $.each(self.rowVMs, function(index, vm) {
            if(vm.bulletchart) // The one just added is ignored
               vm.calculate();
          });
        }

        self.setCurrentRow(current) {
          // update currentRow observable obj
          // draw config. panel
          ...
        }

    }
于 2013-05-15T07:36:03.767 に答える