我可以在Jade模板</script>的<script>标记中引用JS的Node JS函数

时间:2013-03-06 23:44:28

标签: javascript node.js express pug

我正在使用Node.js,Express和MongoDB构建博客。在我的“创建新帖子”模板中,我有一个标题字段和一个slug字段。

我正在使用来自NPM的Slugs for Node.js:https://npmjs.org/package/slugs

我想做的是:

  1. 使用EventListener
  2. 动态获取标题文本输入中的值
  3. 通过slugs()函数和
  4. 过滤它
  5. 将其添加到slug文本输入的value属性。
  6. 所以我会输入“我最喜欢的角色是&amp;”在标题字段中,别名字段中的值将动态更改为“my-favorite-character-is”。

    我相信你必须做一些像这个问题中接受的答案: JADE + EXPRESS: Iterating over object in inline JS code (client-side)?

    然而,更多的是引用变量而不是执行函数。而且似乎已经过预处理,然后您无法再访问它了。

    我正在尝试做什么?

    或者我应该选择这样的东西? https://github.com/stipsan/String.Slugify.js

    这是我试图无效的:

    != "<script>"
    != "var post_title = document.getElementById('title');"
    != "var post_alias = document.getElementById('alias');"
    !=
    != "var aliasValidator = function() {"
    != "  this.value = " + slug( + "this.value" ) + ";"
    != "};"
    != "var titleValidator = function() {"
    != "  post_alias.value = " + slug( + "this.value" ) + ";"
    != "};"
    !=
    != "post_title.addEventListener({'keyup': titleValidator, 'keydown': titleValidator, 'change': titleValidator});"
    != "post_alias.addEventListener({'change': aliasValidator});"
    != "</script>"
    

    这是传递变量的视图:

    var slugs = require('slugs');
    
    newPost: function(req, res) {
      return res.render('add-post', {
        title: "Write new post",
        slug: slugs,
        dayDateName: tools.dayName
      });
    }
    

2 个答案:

答案 0 :(得分:1)

这应该与一些东西拼凑在一起:

  1. 为自己添加一个可以加载到浏览器和节点的缓慢功能。有一些简单的方法可以将代码复制/粘贴到public/slugs.js文件中,以及browserifyRequireJS等更复杂的内容。从简单开始,但直接回答你的问题,不,你不能直接从浏览器中直接调用节点进程中存在的函数,但是你可以使用上述之一在节点和浏览器中共享相同的函数技术。
  2. 在浏览器中,使用事件获取输入的标题,转换标题并填充标注字段。这是浏览器端的JS,与模板渲染或节点
  3. 无关
  4. 在处理表单提交的节点代码中,您还需要确保slug有效再次通过sluggify函数运行它(这里你可以使用npm模块)。
  5. 对于jade,你不需要所有那些疯狂的!=前缀,只需这样做(这与你的问题没有直接关系,只是FYI)。

    script
        var put = "your raw javascript here";
        var jade = "knows what to do and you don't need prefixes or escaping";
    

答案 1 :(得分:0)

您编写模板的方式,似乎暗示该功能将在客户端执行。

这是不可能的。

相反,您应该使用ajax回调服务器来执行slug函数,或者预先计算所有值并将其发送给客户端。