1

私の論理:

/* GET /events/list */
router.get('/events/list', function(req, res) {

    new db.Tag({})
    .fetchAll()
    .then(function(tags) {

        res.locals.title = "List of events";
        res.locals.tags = tags;
        res.render('events/list.ejs');
    });
});

私の見解:

<% for (var tag in tags) { %>
    <div class="checkbox">
        <label>
             <input type="checkbox" data-tag-id="<%= tag.tagId %>" />
             <%= tag.name %>
        </label>
    </div>
<% } %>

私が得ているもの:

 [x] undefined
 [x] undefined
 [x] undefined
 [x] undefined

私が得るべきもの:

 [x] foo
 [x] bar
 [x] zort
 [x] troz

私も通してみた

 res.locals.tags = tags.toJSON();

そしてまた

 res.locals.tags = JSON.stringify(tags);

では、最終的にコレクションを EJS ビューに渡すにはどうすればよいでしょうか。

console.log(tags)直後に( ) もログに記録then(function(tags)し、モデル (この場合はタグ) を正しく取得しています。

EJSビューでtags.forEachも試しましたが、次のようなネイティブjavascript配列: [{tagId:1, name:"blah"}, {tagId:2, name"Foo"}]「forEach」メソッドが実装されていません

4

2 に答える 2

0

テンプレートでは、forEach (使用可能な場合) を使用するか、代わりにインデックスを使用してループします。

サーバー.js

res.locals.tags = tags.toJSON();

view.html (で[].forEach)

<% tags.forEach(function(tag) { %>
    <div class="checkbox">
        <label>
             <input type="checkbox" data-tag-id="<%= tag.tagId %>" />
             <%= tag.name %>
        </label>
    </div>
<% }) %>

view.html (インデックス付き)

<% for (var i in tags) { %>
    <div class="checkbox">
        <label>
             <input type="checkbox" data-tag-id="<%= tags[i].tagId %>" />
             <%= tags[i].name %>
        </label>
    </div>
<% } %>
于 2014-07-25T19:47:28.427 に答える
0

を使用する代わりの方法を次に示しArray.prototype.forEachます。Bookshelf コレクションをビューに渡します。Bookshelf.Collection には独自の.forEach:

サーバー.js

res.locals.tags = tags; // NOT .toJSON()

view.html

<% tags.forEach(function(tag) { %>
    <div class="checkbox">
        <label>
             <input type="checkbox" data-tag-id="<%= tag.id %>" />
             <%= tag.get('name') %>
        </label>
    </div>
<% }) %>
于 2014-07-25T20:42:33.860 に答える