有沒有任何選項可以在淘汰賽中暫停和恢復綁定?在knockout.js中掛起綁定1.2.1
版本:1.2.1 knockout.js
我們需要暫停綁定從以下莖。在一些操作過程中,我們必須從服務器加載大量數據,例如多個選擇將他們的全部數據更改,有些表的行會動態添加等。
現在,在當前這種情況下,表單已完全綁定視圖模型。當我們清除組合並添加每個項目時,視圖被刷新,因此存在顯着的延遲。如果我有辦法暫停綁定,則可以暫停,然後將所有數據加載到視圖模型中,然後再次恢復綁定。
有沒有任何選項可以在淘汰賽中暫停和恢復綁定?在knockout.js中掛起綁定1.2.1
版本:1.2.1 knockout.js
我們需要暫停綁定從以下莖。在一些操作過程中,我們必須從服務器加載大量數據,例如多個選擇將他們的全部數據更改,有些表的行會動態添加等。
現在,在當前這種情況下,表單已完全綁定視圖模型。當我們清除組合並添加每個項目時,視圖被刷新,因此存在顯着的延遲。如果我有辦法暫停綁定,則可以暫停,然後將所有數據加載到視圖模型中,然後再次恢復綁定。
我不認爲有一種方法可以在knockout.js中掛起綁定。沒有看到代碼就很難說,但這種緩慢可能是由於您通過清除它們並逐個添加新項目來刷新observableArrays而造成的。相反,你可以刷新整個數組一次:
...
self.manyItems = ko.observableArray();
...
function refreshItems(newItems){
self.manyItems(newItems);
}
如果你真的需要暫停訂閱,我找到了一種方法來暫停他們在計算observable與pauseableComputed(從this site採取的想法)。我修改了一下,添加了pauseableComputed具有讀寫功能的能力。
viewModel.myComputedObservable = ko.pauseableComputed(function() {
return myResult;
}, viewModel);
對於暫停,你叫myComputedObservable.pause();
,讓你所有的修改,然後調用myComputedObservable.resume();
對於那些修改觸發訂閱的計算觀察到的。
//wrapper for a computed observable that can pause its subscriptions
ko.pauseableComputed = function (evaluatorFunction, evaluatorFunctionTarget) {
var _cachedValue = "";
var _isPaused = ko.observable(false);
//the computed observable that we will return
var result;
if (evaluatorFunction.read) {
result = ko.computed({
read: function() {
if (!_isPaused()) {
//call the actual function that was passed in
return evaluatorFunction.read.call(evaluatorFunctionTarget);
}
return _cachedValue;
},
write: function(value) {
if (!_isPaused()) {
//call the actual function that was passed in
return evaluatorFunction.write.call(evaluatorFunctionTarget, value);
}
return _cachedValue;
}
}, evaluatorFunctionTarget);
} else {
result = ko.computed(function() {
if (!_isPaused()) {
//call the actual function that was passed in
return evaluatorFunction.call(evaluatorFunctionTarget);
}
return _cachedValue;
}, evaluatorFunctionTarget);
}
是!這是一個很好的建議!! ..我會嘗試一下,並將其標記爲答案,一旦我檢查出我的代碼! – 2012-02-21 18:34:20
我發現這是最好的方法。謝謝! – CoderDennis 2012-10-02 13:54:45