如何基于服务器和客户端将上下文助手添加到Dust.js中

我正在使用Dust.js和Node / Express。 Dust.jslogging上下文助手函数,帮助器作为一个函数embedded到模型数据中。 我在服务器的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,所以将需要在服务器/客户端之间共享此辅助function的替代方法。 可能有一种方法可以将辅助函数添加到服务器和客户机上的灰尘基础上。 这就是我要找的。 由于“灰尘”文档很less,因此没有logging。 此外,我找不到任何代码片段,certificate这一点。

谢谢你的帮助。

在一个单独的文件中发送你的助手 – 在尘埃的基础上下文中定义它们,如下所示:

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

然后每次你打电话给你的模板,做这样的事情:

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

这基本上是做什么的,它把你的模板的上下文合并到base中,就像'global'上下文一样。 如果推得太多,不要太担心,如果推得太多 – 每当你推动时,base会根据你提供的上下文和全局上下文 – 助手以及你在调用makeBase时定义的任何variables重新创build一个新的上下文。

希望这可以帮助

如果你想stringify来保存函数,你可以使用下面的代码。

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

这可能不会做你想要的。 您很可能需要重新定义客户端上的function或使用像nowjs这样的技术。