更新ko.observable并不反映使用knockout的UI

时间:2012-12-21 11:14:41

标签: knockout.js

我正在使用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);
});

更新数据

在下面工作 - >但我不想使用它的原因是它只是将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的问题。 对此有任何帮助表示赞赏。谢谢

1 个答案:

答案 0 :(得分:0)

observable是一个函数,所以为了获得它的价值,你可以称之为:

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());
  }
});