1

我正在使用 Dust.js 和 Node/Express。Dust.js 记录了上下文助手函数,其中助手作为函数嵌入到模型数据中。我在服务器的 JSON 数据模型中添加了这样一个函数,但是对浏览器的 JSON 响应没有函数属性(即从下面的模型中,prop1 和 prop2 被返回,但 helper 属性没有。

/* 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 所以需要在服务器/客户端之间共享这个辅助函数的替代方法。可能有一种方法可以将辅助函数添加到服务器和客户端的灰尘库中。这就是我要找的。由于 Dust 文档很少,因此没有记录。此外,我找不到任何可以证明这一点的代码片段。

谢谢你的帮助。

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 都会使用你提供的上下文和全局上下文重新创建一个新上下文 - 助手和你在调用 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 回答