首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在引用'content‘模板数据变量后,将脚本/内容包含在Docpad coffeekup布局文件中

在引用'content‘模板数据变量后,将脚本/内容包含在Docpad coffeekup布局文件中
EN

Stack Overflow用户
提问于 2013-07-07 23:07:00
回答 1查看 378关注 0票数 1

在调用‘@content’之后,我在从布局文件中拉入页末脚本(或其他内容)时遇到了问题。我正在使用咖啡杯模板,并有以下default.html.coffee布局文件。

代码语言:javascript
复制
doctype 5
html ->

  head ->

    meta(charset:"utf-8")
    title("Docpad")
    if @document.description?
      meta(name:"description", content:@document.description)

    stylesheets = ['/styles/app.css']
    @getBlock('styles').add(stylesheets).toHTML()

  body ->

    div class:"row", ->
      div class:"large-12 columns", ->
        h1(class:"docs header", "Header")
        hr()

    @content
    @getBlock('scripts').toHTML()

我遇到的问题是,'@ content‘只有在后面没有内容的情况下才能正确地生成和呈现特定于页面的内容(例如,如果上面的@getBlock('scripts')行被删除或注释掉)。然而,使用上面的代码,对脚本的getBlock调用成功了,但是“@ content”没有插入内容。感谢您的帮助,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-08 02:47:14

让我们来看看你的代码的编译后的javascript。我们可以使用coffeescript.org上的编译器来做这件事:

代码语言:javascript
复制
doctype(5);

html(function() {
  head(function() {
    var stylesheets;
    meta({
      charset: "utf-8"
    });
    title("Docpad");
    if (this.document.description != null) {
      meta({
        name: "description",
        content: this.document.description
      });
    }
    stylesheets = ['/styles/app.css'];
    return this.getBlock('styles').add(stylesheets).toHTML();
  });
  return body(function() {
    div({
      "class": "row"
    }, function() {
      return div({
        "class": "large-12 columns"
      }, function() {
        h1({
          "class": "docs header"
        }, "Header");
        return hr();
      });
    });
    this.content;
    return this.getBlock('scripts').toHTML();
  });
});

请注意,this.content只是一个不可操作的语句。就像我做的那样:"a"; "b"; "c"; "d"什么都做不了。

您提供的代码的用法或意图似乎暗示了对CoffeeKup或CoffeeScript的工作方式的误解,所以让我来评估一下发生了什么,以及为什么它有时工作,有时不工作。

当我们传递时,它符合div(function(){return "blah";}),它说传递div,一个函数,当被调用时将返回字符串blah。现在CoffeeKup知道返回给它的任何字符串都应该呈现给它以方便使用。但是由于我们不能返回多个东西(因为第一个返回存在于块中),我们该怎么办呢?

CoffeeKup提供了text函数,允许我们执行以下操作:

代码语言:javascript
复制
div ->
    text "a"
    text "b"

编译后的代码如下所示:

代码语言:javascript
复制
div(function() {
  text("a");
  return text("b");
});

这正是我们想要的,就像div和所有其他元素调用一样,text调用不返回字符串,而是直接输出内容。

因此,总而言之,解决方案是添加前缀:

代码语言:javascript
复制
@content
@getBlock('scripts').toHTML()

使用text调用,因此它变成:

代码语言:javascript
复制
text @content
text @getBlock('scripts').toHTML()

如果你想转义HTML实体(将<转换为&lt;),那么你也需要添加h调用,这样h "content to be escaped"text结合起来看起来就像text h "content to be escaped" -但是这只是一些需要注意的东西,不是你现在或这里需要的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17513312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档