Drupal のサービス モジュールを使用して Web サービスをセットアップしました。Backbone.js フロントエンド アプリケーションを介して要求している JSON を出力します。
この設定に問題があります。Backbone.js のモデルの fetch メソッドを使用してデータを要求すると、モデルの属性はすべてフェッチ後に文字列として入力されますが、整数などの属性がいくつかあります。
例えば:
- Drupal サービス モジュールで標準で利用できるユーザーリソースを有効にしました。
ユーザーをリクエストできます。例:
http://mydevmachine/services/user/8
...次の応答が返されます (実際の応答から簡略化されたバージョン):
{"uid":"8","name":"itsme","mail":"me@mydomain.nl"}
- 上記の Web サービスからの応答では、すべての値が引用符で囲まれていますが、uid は実際には文字列ではなく、データベース内の整数です。
- モデルの uid フィールドを 8 (整数) に設定して、Backbone.js モデルで同じユーザーをフェッチする場合は、fetch メソッドを呼び出します。取得後、uid フィールドは「文字列」として入力されます。
上記の結果、モデルが整数ではなく文字列の uid 属性で終わると仮定します。また、自分のエンティティを使用して作成した他のすべての Web サービス リソースでも発生します。
Backbone のコレクションの並べ替えを使用した並べ替えの問題により、モデルの属性を正しく入力する必要があります。つまり、「整数」型のフィールドを使用してモデルのコレクションをソートすると、文字列として保存されているにもかかわらず同じ値でフィールドをソートすると、ソート結果が異なります。
どこを見ればいいのか正確にはわかりません:
- Drupalサービスモジュールが出力するJSON形式は規格に準拠していますか?
- JSON 出力形式は、Drupal サービス モジュールで構成またはオーバーライドできますか?
- Backbone.js でフェッチした後、モデルの属性の型を保持することはおそらく可能ですか?
- この状況を処理する Backbone のコレクション コンパレータ関数の特定の実装を提供する必要がありますか (ハッキーのようです)。
- ここに投稿されたような他のソリューションを導入する必要があります: How can I enforce attribute types in a Backbone model? (重く感じる)。
助けてくれてありがとう。