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內部有關?
此外,代碼仍然有效,只是有興趣看看是否有人知道爲什麼中斷點沒有被擊中。
不,絕對不是跨域?如果它默默地失敗了,那麼成功回撥仍然會執行嗎?正如我所說的警報顯示,所以回調肯定是執行。但是你的例子證明它不是knockoutjs的副作用。我將不得不繼續研究它。 – 2012-02-15 02:30:31