6

理由はわかりませんが、これを機能させることはできません。

var friends = new Backbone.Collection([
  {name: "Athos",      job: "Musketeer"},
  {name: "Porthos",    job: "Musketeer"},
  {name: "Aramis",     job: "Musketeer"},
  {name: "d'Artagnan", job: "Guard"},
]);

friends.where({job: "Musketeer"}).toJSON()

私は得てUncaught TypeError: Object [object Object] has no method 'toJSON'います。

私が間違っていることと、フィルター処理されたコレクションを JSON に変換するにはどうすればよいですか?

4

2 に答える 2

15

Underscore.whereメソッドが返すものはnotArrayであるBackbone.Collectionため、toJSONメソッドが定義されていません。

したがって、次の 2 つのことを行うことができます。

要素を反復処理し、結果をマップします。

var result = friends.where({job: "Musketeer"});
_.map( result, function( model ){ return model.toJSON(); } );

jsFiddle コード

適切な Backbone.Collection を返す Collection サーチャー メソッドを実装します。

var Friends = Backbone.Collection.extend({
    search: function( opts ){
        var result = this.where( opts );
        var resultCollection = new Friends( result );

        return resultCollection;
    }
});

var myFriends = new Friends([
  {name: "Athos",      job: "Musketeer"},
  {name: "Porthos",    job: "Musketeer"},
  {name: "Aramis",     job: "Musketeer"},
  {name: "d'Artagnan", job: "Guard"},
]);

myFriends.search({ job: "Musketeer" }).toJSON();​

jsFiddle コード

于 2012-05-11T09:48:17.993 に答える
5

toJSON紛らわしいメソッド名です: http://documentcloud.github.com/backbone/#Collection-toJSON

toJSON collection.toJSON()

コレクション内の各モデルの属性ハッシュを含む配列を返します。これは、コレクション全体をシリアライズして永続化するために使用できます。このメソッドの名前は、JavaScript の >JSON API に準拠しているため、少し紛らわしいです。

コレクションを JSON 文字列に変換する場合は、JSON.stringify

var friends = new Backbone.Collection([
  {name: "Athos",      job: "Musketeer"},
  {name: "Porthos",    job: "Musketeer"},
  {name: "Aramis",     job: "Musketeer"},
  {name: "d'Artagnan", job: "Guard"},
]);

JSON.stringify( friends.where({job: "Musketeer"}) );

whereBackbone コレクションではなく、配列を返すことに注意してください。このtoJSONメソッドを使用するには、新しいコレクションを作成する必要があります。

于 2012-05-11T09:37:21.663 に答える