【问题标题】:KoGrid update cellKoGrid 更新单元格
【发布时间】:2013-04-03 21:54:26
【问题描述】:

我正在尝试使用 KoGrid 更新单个单元格,但在我通过单击列标题对网格进行排序之前,我看不到更新发生。

以下是我正在使用的代码。此处提供 JSFiddle:http://jsfiddle.net/b22Ex/2/

不起作用的行是:vm.data()[0].b(100)。既然值是 ko.observable,那不应该工作吗?

var L = [ {a:ko.observable('a1'), b:ko.observable('b1'), c:ko.observable('c1')}, {a:ko.observable('a2'), b:ko.observable('b2'), c:ko.observable('c2')}, {a:ko.observable('a3'), b:ko.observable('b3'), c:ko.observable('c3')} ]; var vm = { data: ko.observableArray(L) }; window.vm = vm; ko.applyBindings(vm); vm.data()[0].b(100) console.log("DONE CHANGING VALUE");

对了,我也遇到了KoGrid how to refresh grid in case data is changed 但我不想更新整个数据集。

【问题讨论】:

  • 您是否尝试过让更新成为按钮的功能?

标签: javascript knockout.js kogrid


【解决方案1】:

更新

试试这个:

Working Fiddle

JS

var xxx = [
    {a:ko.observable('a1'), b:ko.observable('b1'), c:ko.observable('c1')},
    {a:ko.observable('a2'), b:ko.observable('b2'), c:ko.observable('c2')},
    {a:ko.observable('a3'), b:ko.observable('b3'), c:ko.observable('c3')}
];

var vm = {
    data: ko.observableArray(xxx),
};

window.vm = vm;
ko.applyBindings(vm);

 vm.data()[0].b(100);
 vm.data.valueHasMutated();  //This will update your observable in UI


console.log("DONE CHANGING VALUE");

【讨论】:

  • 谢谢,我刚试过,它有效。我必须调用 valueHasMutated() 有什么特别的原因吗?
【解决方案2】:

以下是您的问题的解决方案。检查这个Fiddle

var xxx = [
 {a:ko.observable('a1'), b:ko.observable('b1'), c:ko.observable('c1')},
 {a:ko.observable('a2'), b:ko.observable('b2'), c:ko.observable('c2')},
 {a:ko.observable('a3'), b:ko.observable('b3'), c:ko.observable('c3')}
];
var vm = {
 data: ko.observableArray(xxx)
};
window.vm = vm;
ko.applyBindings(vm);
vm.data()[0].b(100)

vm.data(vm.data()); //This line will make the fix that you need.

console.log("DONE CHANGING VALUE");

【讨论】:

  • 您可以使用 valueHasMutated 属性来自动将更改传播到 UI,而不是重新初始化 observableArray,请查看我更新的答案
猜你喜欢
  • 2014-09-04
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
相关资源
最近更新 更多