0

私はwizmoグリッドを使用しており、StockDataとして作成されたモデルにバインドされています:

//私のビューモデル:

function StockData(data)
{
var self=this;
self.Symbol = data.Symbol;
self.LTP=ko.observable(data.LTP);
};

//ajaxサービス呼び出しが成功した後にデータを追加する

    var arr[];
    jsondata=event.data.value;
    $.each(jsonData,function(i)
    {
    vm.WijGridViewModel.Data.push(new StockData({Symbol:jsonData[i].Symbol,LTP:jsonData[i].LTP}));
    });
ko.utils.arrayForEach(vm.WijGridViewModel.Data(),function(item)
{
vm.WijGridViewModel.FilteredData.push(item);
});

データの更新

以下の1つで動作します->しかし、これを使用したくない理由は、observable []の古いアイテム全体を新しいアイテムに置き換えるだけですが、LTPである単一のフィールドを更新するだけです。以下でまったく新しいアイテムを古いものに置き換えてみましたが、膨大なデータとリアルタイムでパフォーマンスの問題が発生することに気付きました

var newItem = event.data.value1;
var index = event.data.value2;
vm.WijGridViewModel.FilteredData.replace(
vm.WijGridViewModel.FilteredData()[index],
{Symbol:newItem.Symbol,LTP:newItem .LTP});

これまでのところ、これを試しましたが、オブザーバブルは更新されますが、UIは更新されません:

ko.utils.arrayForEach(vm.WijGridViewModel.FilteredData(),function(item)
{
  if(item.Symbol==newItem.Symbol)
{
  item.LTP= newItem.LTP;
}
});

//wijgridとの相互作用のための共通クラス

function WijGridViewModel(){
var self=this;
self.data=ko.observableArray();
self.FilteredData=ko.observableArray();
return
{
Data:self.data,
FilteredData:self.FilteredData
}
}

wijgridを使用する

<table id="dataGrid" data-bind="wijgrid:{data:WijGridViewModel.FilteredData}">

監視可能なフィールドを更新するときにwijgridを更新する際の問題に直面しています。これに関するどんな助けもありがたいです。ありがとう

4

1 に答える 1

0

オブザーバブルは関数なので、その値を取得するには、次のように呼び出します。

var value = item.LTP();

値を設定するには、新しい値をメソッドに渡します。

item.LTP(newValue);

したがって、LTP だけを更新するには、これを試すことができます (完全な例がないと正確に言うのは難しいです)。

ko.utils.arrayForEach(vm.WijGridViewModel.FilteredData(),function(item)
{
  if(item.Symbol==newItem.Symbol)
  {
    item.LTP(newItem.LTP());
  }
});
于 2012-12-21T13:49:43.850 に答える