1

私はブラウザでdust.jsを使用してコンパイルされたテンプレートを使用してHTMLをレンダリングしようとしています(node.jsを使用したサーバー側ではありません)。クライアント側の JavaScript でテンプレートをコンパイルすると、正常に動作します。テンプレートをプリコンパイルし、推奨どおりスクリプト タグとして含めると、dust.loadSource ステートメントによって Chrome デバッガーが次のように表示されます。「Uncaught ReferenceError: nowork is not defined」(「nowork」はテンプレート名) そう...

この HTML とスクリプトは次のように機能します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>This Works</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script src="dust-full-0.3.0.min.js"></script>
</head>
<body>
    <div id="bingo"></div>
    <script type="text/javascript">
        var templateKey = 'works';
        var myView = {"people":[{"name":"Fred"},{"name":"Harry"},{"name":"Linda"},{"name":"Mary"}]};

        dust.loadSource(dust.compile("{#people}<br/>{name}{/people}", templateKey));
        dust.render(templateKey, myView, function(err, out) {
            $('#bingo').html(out);
        });
    </script>
</body>
</html>

しかし、これはしません:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>This Doesn't Work</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script src="dust-full-0.3.0.min.js"></script>
    <script type='text/javascript' src="nowork.js"></script>
</head>
<body>
    <div id="bingo"></div>
    <script type="text/javascript">
        var templateKey = 'nowork';
        var myView = {"people":[{"name":"Fred"},{"name":"Harry"},{"name":"Linda"},{"name":"Mary"}]};

        dust.loadSource(templateKey);
        dust.render(templateKey, myView, function(err, out) {
            $('#bingo').html(out);
        });
    </script>
</body>
</html>

含まれる nowork.js ファイルには次のものが含まれます。

(function() {
    dust.register("nowork", body_0);

    function body_0(chk, ctx) {
        return chk.section(ctx.get("people"), ctx, {
            "block": body_1
        }, null);
    }
    function body_1(chk, ctx) {
        return chk.write("<br/>").reference(ctx.get("name"), ctx, "h");
    }
    return body_0;
})();

誰でも助けることができますか?

これは、これらのファイルが node.js がインストールされたマシンで提供されていないことが原因である可能性があることに気付きました。私は実際にデスクトップマシンでローカルに作業しています。あれですか?

4

1 に答える 1

1

dust.loadSourceコンパイル済みのテンプレートを提供している場合は、実際に呼び出す必要はありません。内部的には、によって返される JavaScript の文字列に対して をdust.loadSource実行するだけです。この行を削除すると、テンプレートは適切にレンダリングされるはずです。evaldust.compiledust.loadSource

ここで試みていることには Node.js は必要ありません。実際のところ、ダストフルも必要ありません。クライアントでレンダリングするだけの場合は、dust-core を使用できます。

于 2013-03-02T23:10:16.370 に答える