2017-09-02 5 views
0

Ember.jsでは、オブジェクト属性にアクセスするために、this.getthis.setを使用することを推奨/必要とするEmber独自のオブジェクトバリアントを使用します。Ember.jsでコードミスをキャッチするためのより良いプラクティス(具体的には、変数名が壊れている)

これがなぜ行われたのか理解していて、Emberのプログラミング体験に一貫性と柔軟性を加えてくれてありがとうございます。しかし、私はIDEの健全性チェックを失うと感じています。

Jetbrain製品(または深い分析と完成度の高いIDE)では、通常、正しい変数名を選択しているかどうかを確認するためにシンボルの提案に頼ることができます。エバーと一緒に弦を入力すると、私は正しい名前を得ることができます。私は虚弱な人間です。

私は考えられる解決策について考えています。

  • アンES6または代替を使用する正しい文字列を提案するために静的解析を行い、一部のIDEプラグインは自動的に私が必要とする文字列定数を確立するためのいくつかの方法でデフォルト
  • によって部材燃えさしの道にアクセスし、言語を蒸散しましたそれらは
  • 私は定義されていない変数を取得しようとすると、少なくとも警告をスローするいくつかのデバッガ設定。
  • emberが属性を未定義に設定しようとしたときに警告を発することも便利です。

これらの解決策の1つが存在するか、より良いことが考えられているか、または問題が実際に問題ではないことを誰かが教えてくれることを願っています。

(私の問題を説明するための例:)次のスニペット

const email = this.get('email'); 

    const newInvitation = this.store.createRecord('invitation', {email: email}); 

で 私は属性emailが、私はemailAddressと呼ばれていた取得するもので、実際の属性を取得しようとしています。私がレコードを作成するとき、コードの後半まで捕捉されない未定義の電子メールフィールドでレコードを作成します。

デバッグは面倒ではありませんでしたが、何かスペルミスをするたびに手動でコードの各行を調べなければならなかったので、多くの時間を無駄にして悲しいデバッグボイスになります。助けて!

+0

これはまだ入力が必要ですが、私が見つけた解決策は[EmberScript](http://emberscript.com/)です。ほとんどのIDEがEmberScriptをサポートしないため、このソリューションが私の投稿の前提に適切に対応しているとは思えません。適切な識別子で文字列検索を置き換えますが、IDEコード分析を使用して文字列ルックアップを利用することができないため、そうすることの価値はありません。 (また、それは解決策のどれほど侵略的であるか不安定である/維持されていない)。 – pixelpax

答えて

2

現在のところ、私たちはこれには適していません。しかし、未来は明るく見えます!

現在、ember-typingsリポジトリには、typescript言語サーバがあなたにその完成を許すtypescript定義を作成する作業がたくさんあります。これにより、this.get('foo')などの補完が得られますが、近いうちにthis.get('foo.bar')などのものは補完できません。

また、私はあなたがproxy objectをサポートするブラウザに.get.setを省略することができるようになる、thisを構築してきました。しかし、これは概念実証であり、実稼働環境で使うべきものです!

あなただけのデバッグメッセージをしたい場合は、アクセスした場合、プロパティのthatsはあなたがunknownPropertyを使用することができヌル:

unknownProperty(key) { 
    console.log('access to unknown property'); 
} 

私は時々そのようなコードのために、未知のプロパティにアクセスするために必要なただし:

if(!obj.get('foo')) { 
    obj.set('foo', 'bar'); 
} 

全体的に私はtypescriptを試してみることをお勧めします。これはおそらく、あなたにすぐれた開発者体験を与えるソリューションと、コミュニティも同様です。面白いのはES classes RFCで、エムバーは標準的なESクラスに向かいますが、ある時点では.set.getはまったくありません。 また、より鮮明な統合が進行しており、見た目の光沢のあるコンポーネントの内部では、.set.getは必要ありません。

また、emberスクリプトをお勧めしません。私はそれを試しましたが、基本的にそれを使用する人はいませんし、サポートも全くありません。

+0

本当に素晴らしい包括的な答え、ありがとう! 私はAngular2とReactプロジェクトにtsを使用しています。それでEmberを使って自分の仕事が簡単にできれば嬉しいです。 私はunknownPropertyに関して何を意味するのかを見ています。私の開発環境のビルドでデフォルトを設定する方法はありますか?おそらく 'Ember.Object.reopenClass'を使って、あなたが指定した通りに(おそらく' console.warn'を使って)unknownPropertyを定義します。これはあなたが考えることができる問題を引き起こすでしょうか? 'Ember.keys(model.toJSON())'を使用してメンバーシップをチェックしたり、コンソールで特定の警告を抑制することができます。 – pixelpax

+0

あなたはこれを行うことができますが、いくつかのアドオンとemberコアが未知のプロパティに依存するため、これは問題を引き起こすと思います。あなたができることは、カスタムオブジェクト(コントローラやコンポーネントなど)で使用する混合を作成することです。これは 'console.warn'を実装しています。また、生産のためにそれを取り除く。私も 'model.toJSON'で何を望んでいるのか分かりませんが、これは間違っています。 – Lux

+0

私は、未知のオブジェクトに対して '.get'を呼び出さずに私自身のオブジェクトのメンバーシップのプロパティをチェックするために、' Ember.keys(model.toJSON())を使ってメンバーシップをチェックします。 ' – pixelpax

関連する問題