2013-04-03 127 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