3

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? (重く感じる)。

助けてくれてありがとう。

4

1 に答える 1