1

次のコードを使用して、別のモデル オブジェクトを含むモデル オブジェクトを作成しようとしています。

//create a question object to be embedded
question = new Onethingaday.Models.Question()
question.set({id:"123456"},{text:"xxxx"},{slug:"xxxx"})

//create the main muse object which contains the question object
muse = new Onethingaday.Models.Muse()
muse.set({question:question.toJSON()})

私が受け取ると予想されるミューズモデルの構造は次のとおりです。

ここに画像の説明を入力

ただし、代わりに次の構造を取得しています

ここに画像の説明を入力

予想される結果と比較して、「question:object」の層がもう 1 つ増えているようです。

期待どおりの結果が得られるようにオブジェクトを設定するにはどうすればよいですか? または、結果を操作して追加のレイヤーを削除する必要がありますか?

4

1 に答える 1

2

まず第一に、これはあなたが思っていることをしません:

question.set({id:"123456"},{text:"xxxx"},{slug:"xxxx"})

に設定idし、 をオプションとして"123456"扱い、 を無視します。あなたはこう言いたい:{text:"xxxx"}set{slug:"xxxx"}

question.set({
    id:   "123456",
    text: "xxxx",
    slug: "xxxx"
});

3 つの属性を設定します。

本当の問題に。デフォルトtoJSONは単にこれです:

return _.clone(this.attributes);

そのため、単に属性オブジェクトを返すのではなくtoJSON、キーを含めるように変更するものを使用する必要があります。questionストックバックボーンでこれを試すことができます:

var M1 = Backbone.Model.extend({});
var M2 = Backbone.Model.extend({});

var m1 = new M1;
m1.set({ a: 'b', c: 'd' });

var m2 = new M2;
m2.set({ m1: m1.toJSON() });

console.log(m2.attributes);

コンソールに次のように表示されます。

m1: Object
    a: "b"
    c: "d"

余分な名前空間は見えません。デモ: http://jsfiddle.net/ambiguous/9ptgq/

したがって、あなたまたはあなたが使用している一部のライブラリが変更されてtoJSONおり、それを考慮する必要があります: </p>

var muse = new Onethingaday.Models.Muse()
muse.set(question.toJSON());

console.log(question.toJSON())それが間違っていることを確認するために何を言わなければならないかを見ることができますtoJSON

于 2012-12-31T07:49:55.700 に答える