2015-09-26 19 views
0

有點新的淘汰賽只是試圖找出如何顯示加載一個div而ko計算功能正在運行。我不確定我需要什麼,也許我需要使用淘汰賽擴展程序?顯示加載div而淘汰計算功能正在運行

這裏的任何地方都是小提琴。

http://jsfiddle.net/zf5k9rxq/10/

HTML

<input data-bind="value: val" /> 
<p><span data-bind="text: comp"></span> 
</p> 
<div data-bind="if: showloading">Loading...</div> 

的Javascript

function model() { 
    var self = this; 

    self.val = ko.observable("hello"); 
    self.showloading = ko.observable(true); 

    this.comp = ko.computed(function() { 
     //show loading 
     this.showloading(true); 

      // begin long running function 
     var i = 0; 
     var j = 0; 
     while (i < 100000) { 
      i++; 
      j = 0; 
      while (j < 80000) { 
       j++; 

      } 
     } 
     // end long running function 

     //hide loading and return 
     this.showloading(false); 
     return this.val().toUpperCase(); 
    }, this); 



} 

var mymodel = new model(); 

$(document).ready(function() { 
    ko.applyBindings(mymodel); 
}); 
+2

之前,你揣摩如何使用基因敲除,那麼應首先閱讀操作如何異步工作。你的「長時間運行的功能」會阻礙一切,如果你想要的話你可以得到你想要的div,那甚至都不重要。 –

回答

2

我不知道爲什麼你需要在計算Show/Hide DIV可能是其一個模擬了Ajax調用我相信的。

你可以通過這樣的東西來實現它。查看下面代碼中的註釋行,查看我所做的小改動。

觀點:

<input data-bind="value: val" /> 
<p><span data-bind="text: compute,visible:!showloading()"></span></p> /*Toggling span visibility if loader is running*/ 
<div data-bind="if: showloading">Loading...</div> 

視圖模型:

function model() { 
    var self = this; 
    self.val = ko.observable("hello"); 
    self.showloading = ko.observable(true); 
    self.compute = ko.observable(); 

    ko.computed(function() { 
     var val = self.val(); //Creating a subscription 
     //show loading 
     self.showloading(true); 
     setTimeout(function() { //Delaying execution to show Loader 
      self.showloading(false); 
      self.compute(val ? val.toUpperCase() : val) //Assigning value to observable inside computed . 
     }, 3000) 
    }); 
} 

$(document).ready(function() { 
    ko.applyBindings(new model()); 
}); 

PS:您可以使用,如果你想避免計算的訂閱過的。

工作樣品去here

+0

是的,謝謝,訂閱是我需要的。對於我的真實項目,我在桌面上進行實時搜索,有時如果有很多行會掛起一兩秒鐘,所以我只是試圖在桌面頂部顯示一個微調。 –

+0

你並不需要訂閱或計算。 http://jsfiddle.net/zf5k9rxq/14/ –

+0

@RoyJ同意,但我用計算/訂閱顯示'加載'進行進一步的變化,當輸入。 setTimeout確實顯示加載,但只在onLoad上顯示。 –