1

基本
的な質問 socket.emit()を介してオブジェクトを送信しようとしていますが、オブジェクトが完全に送信されていません。私はこれを行う方法を誤解しているかもしれませんが、ここに例があります:

console.log(object)

結果

{ length: 8,
  models:
   [ { attributes: [Object],
       _escapedAttributes: {},
       cid: 'c1',
       changed: {},
       _silent: {},
       _pending: {},
       _previousAttributes: [Object],
       lots: [Object],
       _changing: false,
       collection: [Circular],
       _callbacks: [Object] },
    ... ETC

その間

socket.emit(e,object);

結果:

{"name":"read:AllAuctions","args":
[[{"auctionId":"298"},{"auctionId":"381"},{"auctionId":"385"},
{"auctionId":"393"},{"auctionId":"394"},{"auctionId":"395"},
{"auctionId":"402"},{"auctionId":"800"}]]}

後者の形式でフロントエンドに到着します。

はるかに詳細socket.io
を使用してクライアント側のバックボーンモデルを更新しようとしているサーバーを作成しました。その一部は、ここで指定されたアイデアを使用しています。

http://developer.teradata.com/blog/jasonstrimpel/2011/11/backbone-js-and-socket-io

違いは、バックエンドでバックボーンモデルを作成したことです。私のロジックは、基本的なモデルファイルを共有し、バックエンドで永続層との通信と「真の」データソースの最適化を維持することでしたが、それらのモデル/コレクションをフェッチするリクエストに応答し、更新を自動的にプッシュします。

モデルをフロントエンドに転送することになっていることを除いて、すべてが機能しているようです。JSONまたは実際にトランスポート用に変換する別のメソッドに拡張/上書きする必要がありますか?もしそうなら、どうすればいいですか?あなたが私に与えることができるどんな助けでも大いに感謝されるでしょう!

4

3 に答える 3

1

データを送信して、クライアント側でオブジェクトを再作成するだけでよいと思います。

そのため、BackboneCollectionのを使用してみることができますtoJSON

socket.emit(e, object.toJSON());
于 2012-04-13T10:00:44.683 に答える
1

送信する前に、JSON.stringifyを使用し、もう一方の端でJSON.parseを使用して逆シリアル化します。

于 2012-04-14T06:18:32.540 に答える
0

私は自分の質問に答えるのは嫌いですが、別の質問で問題を見つけました: バックボーンモデルとコレクションをJSON文字列に保存する

基本的に、私が気付いていなかったのは、toJSON()がモデルの属性のみを返すことでした。私のモデルには他のモデルのコレクションが含まれていたため、toJSON()を上書きする必要がありました。

コレクションは、子モデルのtoJSON()を呼び出します。そのため、最終的には、モデルのtoJSON関数を変更して、属性とそれに含まれるモデルのコレクションを返す必要がありました。

次に例を示します。

var Auction = Backbone.Model.extend({
  defaults: {
    auctionId : null
  },
  toJSON : function() {
    var returnObject = {};
    returnObject["auctionId"] = this.get("auctionId");
    returnObject["lots"] = this.lots;
    return returnObject;
  },
  initialize : function() {
    this.lots = new Lots;
  }
});

私の例では、モデルのすべての属性を返すのではなく、属性「auctionId」を返すだけであることに注意してください。ここにいる別の開発者が後で転送する必要のない属性を追加する可能性があるため、これは私には安全に思えました。そうは言っても、returnObjectの要素にすべての属性を含めることをお勧めします。これにより、クライアント側でのモデルの再構築が少し簡単になりました。

于 2012-04-16T15:19:06.123 に答える