1

私は Dust.js と Node/Express を使用しています。Dust.js は、ヘルパーが関数としてモデル データに埋め込まれているコンテキスト ヘルパー関数を文書化します。サーバーの JSON データ モデルにそのような関数を追加していますが、ブラウザーへの JSON 応答には関数プロパティがありません (つまり、以下のモデルから prop1 と prop2 が返されますが、ヘルパー プロパティは返されません。

/* JSON data */
model: {
    prop1: "somestring",
    prop2: "someotherstring",
    helper: function (chunk, context, bodies) {
        /* I help, then return a chunk */
    }
/* more JSON data */

JSON.stringify (response.json() から呼び出される) が関数プロパティを削除していることがわかります。JSON.stringify の使用を避けることができるかどうかわからないため、サーバー/クライアント間でこのヘルパー関数を共有する別の方法が必要になります。サーバーとクライアントの両方のダストベースにヘルパー関数を追加する方法がおそらくあるでしょう。それが私が探しているものです。ダストのドキュメントはまばらなので、これはドキュメント化されていません。また、これを示すコード スニペットが見つかりません。

助けてくれてありがとう。

4

2 に答える 2

2

ヘルパーを別のファイルで送信します-次のように、ダストの基本コンテキストでヘルパーを定義します。

base = dust.makeBase({foo:function(){ code goes here }})

次に、テンプレートを呼び出すたびに、次のようにします。

dust.render("index", base.push({baz: "bar"}), function(err, out) {
  console.log(out);
});

これが基本的に行うことは、テンプレートのコンテキストを「グローバル」コンテキストのようなベースにマージすることです。プッシュしすぎた場合に base が台無しになることを心配する必要はありません。プッシュするたびに、base は、指定したコンテキストとグローバル コンテキスト (makeBase を呼び出したときに定義したヘルパーと変数) を使用して新しいコンテキストを再作成します。

お役に立てれば

于 2012-06-26T06:53:12.093 に答える
-1

stringifyで関数を保持したい場合は、次のコードを使用できます。

JSON.stringify(model, function (key, value) {
  if (typeof(value) === 'function') {
    return value.toString();
  } else {
    return value;
  }
});

これはおそらくあなたが望むことをしません。ほとんどの場合、クライアントで関数を再定義するか、nowjsなどのテクノロジーを使用する必要があります。

于 2012-05-30T19:20:36.927 に答える