2012-02-13 22 views
3

最近我一直在玩Knockout,我試圖用一個訂閱ko計算的observable來替換$(「」)。change處理程序。

我遇到的問題是,當我使用knockout在計算的observable內部進行ajax調用時,firebug不會在調試器關鍵字或成功回調中的任何斷點上斷開,但在ajax被解僱時工作正常在$()。更改處理程序中。

該代碼似乎工作,但我很感興趣,如果有人知道它爲什麼不停止在斷點?

這裏是原代碼,它打破在成功回調罰款:

$("#textarea").change(function() { 
         $.ajax({ 
          //code elided 
          success : function(response){ 
            debugger 
            alert(response); 
           }; 
         }); 
       }); 

這裏是在淘汰賽中的代碼。

function ViewModel(){ 
     var self = this; 
     self.textValue = ko.observable(); 
     self.throttledValue = ko.computed(this.textValue) 
         .extend({ throttle: 400 }); 


     this.throttledValue.subscribe(function (val) { 
      if (val !== ''){ 
       $.ajax({ 
        //code elided 
        success : function(response){ 
           debugger 
           alert(response); 
           }; 
         }); 
      } 
     }); 

}; 

我希望以上說明了我在做什麼。

實質上,兩者都會顯示警報,並顯示來自ajax調用的響應,所以我們知道調用了成功函數,但只有第一個函數會停止在「調試器」上。

任何人都可以闡明這種行爲嗎?它是否與訂閱throttledValue計算的observable內部有關?

此外,代碼仍然有效,只是有興趣看看是否有人知道爲什麼中斷點沒有被擊中。

回答

1

我想你正在進行跨域調用,他們默默地失敗。 我創建了與Ajax調用到同一個域的示例,所有工作正常。在Chrome,IE,FF

驗證

試試吧http://jsfiddle.net/Hju2v/2/

+1

不,絕對不是跨域?如果它默默地失敗了,那麼成功回撥仍然會執行嗎?正如我所說的警報顯示,所以回調肯定是執行。但是你的例子證明它不是knockoutjs的副作用。我將不得不繼續研究它。 – 2012-02-15 02:30:31