2013-06-05 32 views
1

我使用敲除定製bindingHandler綁定數據到slickgrid基於rniemeyer的一個例子,當代碼運行時,如果你點擊「添加」鏈接,然後一行添加到使用myObservableArray.push(newRow)的網格,但是當您嘗試通過「替換」鏈接替換網格中的所有數據時,網格不會更新,並且添加按鈕停止工作。我試圖通過調用myObservableArray(multipleRows)來更新obsevable數組是否是這樣做的正確方法?添加mulltiple項目與滑動網格與淘汰賽observableArray

爲例: http://jsfiddle.net/davidoleary/bwSmy/

var viewModel = { 
    items: ko.observableArray([]), 
    addItem: function() { 
     this.items.push(new Item(0, "New", 5.00)); // works 
    }, 
    replace: function() { 
     var newList = [new Item(0, "New", 6.00),new Item(0, "New", 7.00)] 
     this.items(newList); // fails without throwing error 
    }, 
} 

回答

1

你錯過了在的SetData的更新淘汰賽的自定義綁定。 grid.setData(data,true);

這裏是它會是什麼樣子:

ko.bindingHandlers.slickGrid = { 
    init: function(element, valueAccessor) { 
     var settings = valueAccessor(); 
     var data = ko.utils.unwrapObservable(settings.data); 
     var columns = ko.utils.unwrapObservable(settings.columns); 
     var options = ko.utils.unwrapObservable(settings.options) || {}; 
     grid = new Slick.Grid(element, data, columns, options); 
    }, 
    update: function(element, valueAccessor, allBindingAccessor, viewModel) { 
     var settings = valueAccessor(); 
     var data = ko.utils.unwrapObservable(settings.data); //just for subscription 
     grid.resizeCanvas(); // NB Very important for when a scrollbar appears   
     grid.setData(data,true); // This is what was missing 
     grid.render(); 
    } 
} 

更新小提琴: http://jsfiddle.net/joybroto/bwSmy/4/

0

我不使用淘汰賽,但我想這將需要看起來像這樣:

var newList = [new Item(0, "New", 6.00),new Item(0, "New", 7.00)]; 
this.items(ko.observableArray(newList)); 
0

淘汰賽和SlickGrid使用的基礎數據陣列來進行他們的工作。所有你需要做的就是讓他們使用相同的數組。 通過

this.items(newList); 

您使Knockout使用其他數組。這裏良好的OPTON是要求SlickGrid做同樣的:

grid.setData(newList, true); 
grid.render(); 

這裏是http://jsfiddle.net/bwSmy/6/看其他選項