2016-07-02 2 views
0

私はこのクラスをうまく使っていますが、私のテンプレートでは、の代わりにthis.nameと入力できるように変更することができれば不思議でした。 ES5クラスのスタイルでは、this.template = function(content, i) {}のようなことができますが、this.template(content, i) {}は動作しませんでした。これは可能ですか?私は自分のjsonから名前キーを返すたびに、this.nameという文章を書きましたか?'this.name'はJavascriptのES6クラスでは、単に '名前'にすることはできますか?

person = class { 
    constructor(data) { Object.assign(this, data); } 
    template(content, i) { 
    content.push(` 
     <div class="card"> 
     <div class="card-block"> 
      ${key('<h4 class="card-title">', this.name, '</h4>')} 
      ${key('<h6 class="card-subtitle text-muted">', this.title, '</h6>')} 
     </div> 
     <ul class="list-group list-group-flush"> 
      ${each('<li class="list-group-item">', this.school.reverse(), '</li>')} 
     </ul> 
     <div class="card-block"> 
      <a class="btn btn-secondary" href="#" role="button">Bio</a> 
     </div> 
     </div> 
    `); 
    } 
}; 
+0

クラス構文がstrictモードを強制しない場合、メソッドの内容を 'with(this){...}'ステートメントにラップすることができます。ここで 'with'は禁止されています。 – Oriol

+0

私はその音が好きです。自分のクラスをES5に変換したい。 – BarryMode

+0

次に、「with」には重要なパフォーマンスコストがあり、悪い習慣とみなされていることに注意してください。しかし、はい、うまくいくでしょう。 – Oriol

答えて

4

はい。

template(content, i) { 
    const {name, title, ...} = this; 
    content.push(` 
     <div class="card"> 
     <div class="card-block"> 
      ${key('<h4 class="card-title">', name, '</h4>')} 
      ... 

これが十分に短くない場合は、カスタムテンプレートシステムに固執してください。

this.templateについては、比較が正しくありません。 template(content, i) { ... }はクラスメソッドの構文です。のショートカットです。

+0

これは私の質問に答えます。私のユースケースでは、変数にキー名を実際に記録する必要がないように、私はそれを保持しようとしています。生成されたキー名であなたのメソッドに従ってみましたが、問題があります。なぜこれがうまくいかないのか分かりません。 'var {Object.keys(this).toString()} = this;'オブジェクトを12種類作成しようとしましたが、最終的に 'this'を避けるために手動で入力する必要があるようです。私がそれをやろうとしている唯一の理由は、ユーザーがテンプレートを書くことができれば、キー名以外のものを書いても心配する必要がないからです。 – BarryMode

+0

[Destructuring](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)はそれほど機能しません。これについてはもっと読む必要があります。この 'const {name、title、...} = this'はIDEが静的解析を実行し、それらのプロパティのいくつかが存在しない場合に開発者に警告します。これは、JSが提案できるものです。私は、(それは非常に良い理由のために)廃止されたステータスを持っているので、 'with'を使うことをお勧めします。 – estus

+0

開発者以外の人のためにテンプレートを編集できるようにするには、いくつかの簡単な作業を行い、提供されたコンテキスト(例えば、「this」)からキーを自動的に取得できるサードパーティのテンプレート(ハンドルバー、Swigなど)を使用します。 – estus

1
Use desctructing Es6 

person = class { 
    constructor(data) { Object.assign(this, data); } 
    template(content, i) { 
    let {name} = this; 
    content.push(` 
     <div class="card"> 
     <div class="card-block"> 
      ${key('<h4 class="card-title">', name, '</h4>')} 
      ${key('<h6 class="card-subtitle text-muted">', this.title, '</h6>')} 
     </div> 
     <ul class="list-group list-group-flush"> 
      ${each('<li class="list-group-item">', this.school.reverse(), '</li>')} 
     </ul> 
     <div class="card-block"> 
      <a class="btn btn-secondary" href="#" role="button">Bio</a> 
     </div> 
     </div> 
    `); 
    } 
}; 
関連する問題