我正在使用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文档很稀疏,因此没有记录。此外,我找不到任何证明这一点的代码片段。
感谢您的帮助。
答案 0 :(得分:2)
将您的助手发送到一个单独的文件中 - 在基础上下文中定义它们,如下所示:
base = dust.makeBase({foo:function(){ code goes here }})
然后每次调用模板时,都要执行以下操作:
dust.render("index", base.push({baz: "bar"}), function(err, out) {
console.log(out);
});
这基本上是做什么的,它将你的模板的上下文合并到base中,就像&global;' global'上下文。如果你推得太多,不要太担心基础错误 - 每次推动时,base都会根据你提供的上下文和全局上下文 - 助手以及你调用makeBase时定义的任何变量重新创建一个新的上下文。 / p>
希望这会有所帮助
答案 1 :(得分:-1)
如果您希望stringify保留功能,可以使用以下代码。
JSON.stringify(model, function (key, value) {
if (typeof(value) === 'function') {
return value.toString();
} else {
return value;
}
});
这可能不会做你想要的。您很可能需要在客户端上重新定义该功能或使用像nowjs这样的技术。