2013-04-03 97 views
3

我想用KoGrid更新单个单元格,但直到我通过单击列标题对网格进行排序后,才看到更新发生。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 但我不想更新整个数据集。

+0

您是否尝试过将更新作为一个按钮的功能? – segFault 2013-04-04 03:13:51

回答

4

更新

试试这个:

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"); 
+0

谢谢,我只是试过这个,它的工作原理。是否有一个特殊的原因,我必须调用valueHasMutated()? – krasnaya 2013-04-04 14:29:13

1

下面是解决你的问题。检查这个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"); 
+0

不用重新初始化observableArray,你可以使用'valueHasMutated'属性,它会自动将更改传播到UI,检查我更新的答案 – gaurav 2013-04-04 04:25:13