2012-02-13 16 views
3

最近ノックアウトで遊んでいましたが、$( "")チェンジハンドラをko計算されたオブザーバブルのサブスクリプションに置き換えようとしています。

ノックアウトで計算されたオブザーバブルの中で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呼び出しでサンプルを作成しましたが、すべて正常に動作します。クローム、IEで検証、FF

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

+1

いや、間違いではないクロスドメインのそれを試してみてください?それが黙って失敗しても、成功のコールバックはまったく実行されますか?コールバックが確実に実行されるように、アラートが表示されると述べました。しかし、あなたの例は、それがノックアウトの副作用ではないことを証明しています。私はそれを調べ続ける必要があります。 –