2016-11-03 5 views
0

私はバックボーンのアプリケーションでいくつかのコーディング標準を修正するためにeslintを使用しています。私はif文規格に三項演算子を変換するために必要だ三項演算子を伝統的なif文に変換するときの未定義の変数

getData: function(foo){ 
    var self = this; 
    $.when(foo).then(function(){ 
     var doUpdate = false; 

     self.makeAjaxRequest().done(function(data){ 
     self.trigger(doUpdate === false ? "foo" : "bar"); 
     }); 
    } 
} 

:私は、ビュー(簡略化されたコード)で、以下の機能を持っています。だから私はこれを試してみました:

getData: function(foo){ 
    var self = this; 
    $.when(foo).then(function(){ 
     var doUpdate = false; 

     self.makeAjaxRequest().done(function(data){ 
     self.trigger(function(){ 
      if(doUpdate === false) { 
       return "foo"; 
      } 

      return "bar"; 
     }); 
     }); 
    } 
} 

残念ながら、コードに問題を引き起こすようです。私はdoUpdateを正しく参照しているのだろうかと思います。この変換で私はどこに間違っていますか?

乾杯!

+0

としてself.triggerへのあなたの引数は関数である...あなたは( '追加する必要があります)'クロージング後に ''}私は「機能 –

答えて

3

元のコードでは、"foo"または"bar"という値でtriggerが呼び出されます。

triggerは、という機能を持つと呼ばれています。

条件付きで置き換えた関数を呼び出すことはありません。

私は条件付きのバージョンを維持するだろうが、あなたの代わりにあなたの選択肢を使用したい場合は、コールあなたの関数:あなたはしかし、条件を削除する必要がある場合は

getData: function(foo){ 
    var self = this; 
    $.when(foo).then(function(){ 
     var doUpdate = false; 

     self.makeAjaxRequest().done(function(data){ 
     self.trigger(function(){ 
      if(doUpdate === false) { 
       return "foo"; 
      } 

      return "bar"; 
     }()); 
//  ^^--------------- Note 
     }); 
    } 
} 

、私はそれをしないだろうそうですね。代わりに:

getData: function(foo){ 
    var self = this; 
    $.when(foo).then(function(){ 
     var doUpdate = false; 

     self.makeAjaxRequest().done(function(data){ 
     var triggerWith; 
     if (doUpdate === false) { 
      triggerWith = "foo"; 
     } else { 
      triggerWith = "bar"; 
     } 
     self.trigger(triggerWith); 
     }); 
    } 
} 

サイドノート:あなたはそのコードの事例であるようには見えない本当のfalseため特にチェックする必要はなく、様々な他のfalsy値を、持っていない限り、単にif (doUpdate === false)ではなくif (!doUpdate)が通常の方法です。

+0

のこのケースでは、ニーナ・シュルツの答えを使用して終了しました。しかし、私が持っていた他の問題を修正した正解です – David

2

self.triggerを呼び出す前にif節を直接使用しないのはなぜですか?

self.makeAjaxRequest().done(function(data) { 
    if (doUpdate) { 
     self.trigger("bar"); 
    } else { 
     self.trigger("foo"); 
    } 
}); 
0

私は自分のバックボーンに少しさびたんだけど、引数として機能して `Backbone.Events.triggerを使用することはできません私の知る限り。 になる可能性がありますが、iifeに設定する(または名前付き関数にする)。

self.trigger((function(){ 
    if(doUpdate === false) { 
     return "foo"; 
    } 

    return "bar"; 
}())); 

かという名前の関数

function getUpdateEventName(doUpdate) { 
    if(doUpdate === false) { 
     return "foo"; 
    } 

    return "bar"; 
} 

self.trigger(getUpdateEventName(doUpdate)); 
関連する問題