有没有任何选项可以在淘汰赛中暂停和恢复绑定?在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