【问题标题】:dust.js format text through a functiondust.js 通过函数格式化文本
【发布时间】:2012-10-24 10:48:48
【问题描述】:

我有一个模糊文本的 javascript 函数:

function blurlines(data) {
    var dataSplit = data.split(" ");
    var lastWord = dataSplit.pop();
    var toBlur = '<span class="blur">' + dataSplit.join(" ") +  '</span>'; 
// Blur entire sentace, show only last word
     var output = '<li>' + toBlur + lastWord + '</li>';
     return output;
}

我正在尝试通过以下方式使其与dust.js一起使用:

{#storylines}
    <script>
        blurlines("{text}");
    </script>                   
{/storylines}

有没有办法通过 JS 函数轻松传递 {text} 值然后渲染输出?

如果我在控制台中运行它似乎可以工作:

&gt; blurlines("This is a test line")

&gt; "&lt;li&gt;&lt;span class="blur"&gt;This is a test&lt;/span&gt;line&lt;/li&gt;"

【问题讨论】:

    标签: node.js mongodb express socket.io dust.js


    【解决方案1】:

    我做了类似的事情,在我的全局上下文中创建一个辅助函数:

    var dustCtx = dust.makeBase({
        blurText: function(chunk, context, bodies, params) { 
            var dataSplit = params.data.split(" ");
            var lastWord = dataSplit.pop();
            var toBlur = '<span class="blur">' + dataSplit.join(" ") +  '</span>'; 
            var output = '<li>' + toBlur + lastWord + '</li>';
            return chunk.write(output);
        }
    });
    

    在渲染时将其与本地上下文合并:

    dust.render("template", dustCtx.push({storylines:...}), function(err, out) {});
    

    然后这样称呼它:

    {#storylines}
        {#blurText data=text/}
    {/storylines}
    

    例如,如果您想控制模糊,这种方法对于传递其他参数可能很方便。

    【讨论】:

    • 在哪里创建辅助函数,我不熟悉
    • 帮助函数需要是上下文对象中的属性,可能与您根据我对过滤器的理解创建过滤器的位置相同。在上面的示例中,只需在调用dust.render时可以访问dustCtx变量,您可以看到dustCtx.push()会将您自己的上下文与dustCtx合并,这样您就可以用有用的功能填充dustCtx并重复使用。
    • 抱歉,看起来过滤器是通过扩展dust.filters添加的,因此它们的工作方式不同(抱歉尚未广泛使用它们)。但是,您仍然应该调用dust.render(),第二个参数是您的上下文,作为一个简单的演示,您只需将上面的blurText函数添加到您的上下文中,它就应该像上面一样工作。
    【解决方案2】:

    我创建了一个dust.js 过滤器来让它工作

      bl: function(value){  var dataSplit = value.split(" ");
        var lastWord = dataSplit.pop();
        var toBlur = '<span class="blur">' + dataSplit.join(" ") +  '</span>'; 
         var output = toBlur + lastWord;
         return output; }
    

    并在模板中传递以下内容:

    {#storylines}
        <li>{text|bl|s}</li>    
    {/storylines}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2022-09-30
      • 2012-09-16
      • 2012-10-28
      相关资源
      最近更新 更多