2

node.jsでサーバー側の HTML を作成するのに役立つと思われる Jed Schmidt のdomoを発見しました。

forEach()基本的なものは機能しますが、配列のようなループを使用してテーブルの行などを作成する方法がわかりません。基本的な例を作成しました:

var domo = require('domo');

var fruits = [];
fruits.push("banana", "apple", "peach");

var document = DOCUMENT({type: "html"},
  HTML(
    HEAD(
      TITLE("bla"),
      SCRIPT({src: "/script.js"})
      ),
    BODY(
      TABLE(
        THEAD( TR( TD("Predicate"), TD("Object"))),
        TBODY(
          fruits.forEach(function(value, index) {
            console.log("I am in forEach");
            console.log("Value: "+value);
            console.log("Key: "+index);
            TR(
              TD(index),
              TD(value)
              )
          })
          )
        )

      )
    )).outerHTML;

console.log(document);

これにより、現在、次の出力が得られます。

<!DOCTYPE html>
<html>
    <head>
        <title>
            bla
        </title>
        <script src="/script.js" type="text/javascript">
</script>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <td>
                        Predicate
                    </td>
                    <td>
                        Object
                    </td>
                </tr>
            </thead>
            <tbody>
                <!--undefined-->
            </tbody>
        </table>
    </body>
</html>

これが正しく取得された場合、forEach ループ内で domo のスコープにアクセスできません。これは正しい解釈ですか?それを行うための正しい作業方法は何ですか?

解決策:

Bergi からのヒントと Jed Schmidt による修正のおかげで、このフラグメントが機能するようになりました (domo >=0.5.5):

TBODY( fruits.map(function(value, index) {
  return TR(
    TD(String(index)),
    TD(value)
    );
}))
)
4

1 に答える 1

3

forEachundefined配列を反復した後に戻ります。

これらの関数が配列を引数として受け入れるかどうかはわかりませんが、試してみてくださいmap:

TBODY( fruits.map(function(value, index) {
    console.log("I am in map");
    console.log("Value: "+value);
    console.log("Key: "+index);
    return TR(
//  ^^^^^^ dont forget this
        TD(index),
        TD(value)
    );
}))
于 2012-11-13T21:16:33.283 に答える