2016-06-13 7 views
0

私はこれを求める正しい領域を得たいと思っています... 以下は、私が取り組んでいる2つのファイルのいくつかのコードです。関数内の 'this.'を矢印の関数に変更すると、コードは期待どおりに機能しなくなります。Meteor - Arrow関数がES6の各ループを壊している

誰かが私が間違っていることを説明できますか?矢印機能を使用するときは、何か別のことをする必要がありますか?私はこれを使っているのですか?間違って始める?このように矢印関数を使用しないでください。

お願いします。

クライアント/ビュー/ jobList.html

{{#each jobs}} 
    <tr> 
     <td>{{jobID}}</td> 
      <td>{{user.fullname}}</td> 
      <td>{{product.type}}</td> 
      <td>{{shortDesc}}</td> 
      <td>{{formattedDate}}</td> 
      <td>{{phone}}</td> 
      <td>{{user.username}}</td> 
      <td>{{jobType}}</td> 
      <td>{{product.brand}}</td> 
      <td>{{product.type}}</td> 
      <td>{{product.model}}</td> 
     </tr> 
    {{/each}} 

クライアント/ビュー/ jobList.js矢印機能に関する基本的な事柄の

Template.jobList.helpers({ 
    jobs:()=> Jobs.find({}, {sort: {jobDate: 1}}), 

    formattedDate: function() { // Changing this to arrow function breaks functionality 
     let d = this.jobDate; 
     let e = formatDate(d); 
     return e; 
    }, 
    shortDesc: function() { // Changing this to arrow function breaks functionality 
     if (this.description.length > 40) { 
      return this.description.substr(0, 50) + '...'; 
     } else { 
      return this.description 
     } 
    }, 
    jobID: function() { // Changing this to arrow function breaks functionality 
     let a = this.jobNum; 
     let e = this.jobType.substr(0, 1); 
     return e + a 
    } 
}); 
+0

は、私達にあなたの矢印機能は動作しません提示してください:

は、ここでの違いと、問題のイラストですか?私たちがあなたに正しいかどうかを伝える最良の方法;) – Salketer

+0

ヘルパーの 'this'を含むメソッドを矢印関数に変更すると.... – jERCle

答えて

2

一つは、彼らが継承していることである(を閉じて)thisが作成されたコンテキストで表示されます。あなたのコードは、関数が呼び出される方法によって設定されたthisに依存しているので、矢印関数はそこでは良い選択ではありません。

var obj = { 
 
    foo:() => { 
 
     console.log("foo: this.prop:", this.prop); 
 
    }, 
 
    bar: function() { 
 
     console.log("bar: this.prop:", this.prop); 
 
    }, 
 
    prop: "the property" 
 
}; 
 
obj.foo(); // Doesn't show `prop` because `this` != `obj` 
 
obj.bar(); // Does show `prop` because `this` == `obj`

+0

で編集しました。考え始める したがって、これらのインスタンスでは、標準の関数宣言を使用するだけですか? – jERCle

+1

ありがとう!非常に感謝:) – jERCle

+0

@ jERCle:それらは関数の宣言ではありません(関数*式*)が、はい、標準(非矢印)関数を使用します。オブジェクトイニシャライザ(ES2015のもう一つの新しいものです)のメソッド構文を使用して、必要に応じて簡潔にすることができます:http://pastie.org/10874562 –

関連する問題