3

次の埋め込みドキュメントを持っています Mongoose モデルが定義されています

    var mongoose = require("mongoose");
    module.exports = function(mongoose) {
        var Schema = mongoose.Schema,
            chapters, articles;

        Articles = new Schema({
            identity: Number,
            order: Number,
            quick_title: String,
            full_title: String,
            last_edited: Number,
            contributor: [String],
            content: String,
            video_link: String,
            presentation_link: String,
            question_id: [Number],
            show_in_chapter: Boolean,
            summary_text: String,
            summary_image: String
        });
        chapters = new Schema({
            order: Number,
            title: String,
            articles: [Articles]
        });

        return mongoose.model('chapters', chapters);
    }

.find を介してモデル データベース全体を取得した後、著者が推奨する方法 (EJS テンプレート エンジンを使用) を使用して、backboneJS モデルにブートストラップしようとしています。

    var Chapters = Backbone.Collection.extend({});
    chapters = new Chapters( JSON.stringify(<%=chapters%>));

上記のコードを使用すると、エラー Unexpected SyntaxError Unexpected Number が表示されます (最初のタイトルが第 1 章であることに関連して)。

この Mongoose モデルを Backbonejs モデルに変換する方法についてのアイデアはありますか? ありがとう!

アップデート:

テンプレートに送信する前に stringify を使用し、次にテンプレート内でかっこで覆うことで機能するようになりました。chapters = new Chapters("(" + <%-chapters2%> + ")");

残念ながら、これでは必要な Backbone コレクションが得られません。「console.log(chapters.toJSON());」を実行すると、次のようになります

[
Object
([object Object],[object Object],[object Object],[object Object]): Object
__proto__: Object
]

.at メソッドを使用する場合、(0) にもモデルが 1 つしかありません。何か案は?

4

2 に答える 2

1

サーバーで JSON.stringify を行っていない場合は、<%-chapters%> で Unescaped buffering を試してください

chapters = new Chapters(<%- JSON.stringify(chapters) %>);
于 2012-07-23T12:58:44.243 に答える
0

更新後の質問に答えるには、サーバー側で JSON.stringify を使用している場合、以下が機能します

var Chapter = Backbone.Model.extend({});
var Chapters = Backbone.Collection.extend({
    model: Chapter
});
var collection = new Chapters(<%-names%>);
console.log(collection.toJSON());
于 2012-07-24T13:07:43.147 に答える