gpt4 book ai didi

templates - 有没有办法用dust.js 覆盖一层以上的继承值?

转载 作者:行者123 更新时间:2023-12-03 13:07:18 25 4
gpt4 key购买 nike

我正在使用灰尘模板,设计的一个方面一直困扰着我。这让我怀疑我是否“做错了”,所以我想我会问 S.O.有没有办法用块和内联部分在dust.js 中创建多级继承?假设您有一个带布局的基本模板,一个覆盖某些内容的继承模板,然后是另一个从该模板继承的模板,该模板希望有选择地覆盖某些内容。通常我会想象它通过提供最终覆盖值的最后一个继承模板来工作。然而,内联部分语法似乎只能在一个级别上工作。这是一个人为的例子,应该显示我在说什么。

模板 1 test_base.dust :

<h1>
{+document_title/}
</h1>
{+content}
<p>Some great content.</p>
{/content}

模板 2 test_level1.dust :
{>test_base/}
{<document_title}Level 1{/document_title}
{<content}
<p>Other great content</p>
{/content}

模板 3 test_level2.dust :
{>test_level1/}
{<document_title}Level 2{/document_title}

渲染这些模板我得到以下结果:
dust.render('test_base', {}, function(err, data) { console.log(data); } );
"<h1></h1><p>Some great content.</p>"

dust.render('test_level1', {}, function(err, data) { console.log(data); } );
"<h1>Level 1</h1><p>Other great content</p>"

dust.render('test_level2', {}, function(err, data) { console.log(data); } );
"<h1>Level 1</h1><p>Other great content</p>"

我已经阅读了几次文档,但似乎您可以从多个级别继承模板,但您只能覆盖单个模板定义的块。所以我“做错了”吗?有没有办法通过使用块和内联部分的选择性覆盖来完成多级继承?有没有另一种方法可以做到这一点并保持模板干燥?

最佳答案

不幸的是,似乎不支持此继承模型。在linkedin fork 上找到了这个讨论:https://github.com/linkedin/dustjs/issues/101

该讨论引用了文档中的特定段落:

... Inline partials never output content themselves, and are always global to the template in which they are defined, so the order of their definition has no significance. They are passed to all templates invoked by the template in which they are defined.



所以我对此有两种解释:一种顺序是不确定的,可能基于模板的编译方式。第二种可能的解释是全局定义总是取代定义它的模板和模板调用的任何模板。如果这是正确的解释,那么如果它们覆盖的块在继承层次结构中处于相同级别或更高级别,则父模板中的内联部分将始终“获胜”。这与我所期望的相反,并且无法使用内联部分进行多级继承(至少使用相同命名的块)。

似乎这是一个死胡同,关于如何在 Dust 中实现这种行为的任何其他想法?

关于templates - 有没有办法用dust.js 覆盖一层以上的继承值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com