2017-08-29 25 views
2

JSON APIレスポンスを「実際の」Javascript Modelオブジェクトにマッピングする場合、Vue.jsのベストプラクティスまたはデファクトライブラリがありますか? iOS開発から来て、JSONModelMagicalRecordのような優れた図書館があります。Vue.jsのモデルクラスへのJSON応答のマッピング

ほとんどのVue.jsチュートリアル/例わかりやすいJSONレスポンスで動作するようです。 IMHO、これはすぐに面倒なことになります。たとえば、日付文字列のような生データを扱うときには、実際のDateオブジェクトよりも優れています。つまり、ある種の(デ)シリアライズ機能が必要です。また、Foo.findAll()Foo.findById(1)、またはfoo.save()のようなものをバックエンドサービスへの適切な呼び出しを作成するのがいいでしょう。

私はvue-modelが有望に見えましたが、多くの牽引力を持たないようです。これは、JSONをオブジェクトにマッピングするだけで、多くの人がSPAで行うことではないかと思います。 代替アプローチは何ですか?

+0

私は同じ質問で苦労しています。私はモデルの代わりにreduxを見つけました。https://stackoverflow.com/questions/38445006/redux-state-as-array-of-objects-vs-object-keyed-by-id –

答えて

1

これは実際には一般的ではありません。ブラウザベースのSPAでJSONを使用することの美しさは、JSON は、 javascriptであるということです。値を型付きクラスにマップする必要はありません。

私はあなたのことを理解していますし、特定の時にコンストラクタがjavascriptオブジェクトを「初期化子」として受け入れるjavascriptクラスを構築していることがあります。 APIレスポンスでは、メソッドを使用して生のオブジェクトを「クラス」インスタンスに変換するためのレスポンスをマップすることができます。

私はAnimalのjavascriptクラスを持っています。

class Animal { 
    constructor(initializer){ 
    this.name = initializer.name 
    this.born = new Date(initializer.born) 
    } 

    sayMyName(){ 
    console.log(this.name) 
    } 
} 

APIレスポンスでは、応答からAnimalインスタンスを作成するのは非常に簡単です。

getAnimals() 
    .then(response => this.animals = response.data.map(a => new Animal(a))) 

Vueの動物データプロパティには、Animalオブジェクトのコレクションがあります。

+0

私はそこにすべての種類の反復的な定型文を手作業で書く必要なしに、ターンキーソリューションとなります。また、あなたのソリューションは、(デ)シリアライゼーションの問題を解決するだけです。私はまだ手動でリソースをフェッチ、更新、保存などのためにサーバーのバックエンドに話す必要があります。しかし、それは多かれ少なかれベストプラクティスであることを私に教えてくれてありがとう! :) –

+0

vueは誇張されたオブジェクトでのみ動作するため、sayMyNameメソッドは使用できません。 –

+1

@AlekseyRazbakov実際のところは例外です。 https://codepen.io/Kradek/pen/ZXRYvG?editors=1010 – Bert

関連する問題