dart - 我可以动态应用 Dart 的字符串插值吗?

标签 dart dynamic string-interpolation

(来自 Tristan McNab 的 Dart 讨论邮件列表)

我正在尝试构建一个服务器端 MVC 框架并基于模板等生成 View ,我想知道是否可以动态应用 Dart 的字符串插值。例如,这将是我的 View 模板:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>${ViewData["Title"]}</title>
    <link href="/Content/css/site.css" rel="stylesheet" />
  </head>
  <body>
    <h1>${ViewData["Title"]}</h1>
    <div id="container">
      <p>Hello world!</p>
    </div>
  </body>
</html>

我想使用以下方法应用 ViewData 变量:

static String applyViewData(String html, Map ViewData) {
    // apply interpolation here
}

目前这可能吗?我对 API 的搜索表明事实并非如此。

最佳答案

(比尔·黑塞发布)

通过将字符串文字包装在一个函数中,该函数将上下文作为 一个参数,你可以有一个 Function : context -> String 你可以 传递而不是字符串。如果你需要使用一些字符串 对这些对象进行操作,例如连接,您可以实现这些 对封装此类型的类进行操作(“提升”它们)。这 似乎是一种直接给出字符串文字的方法 位置,并给出您想要在另一个中插入的数据。

字符串插值总是动态发生,每次文字 使用,并且数据可以轻松地从参数到函数 而不是来自词汇上下文。

例如:

Function MyTemplate() {
   return (Context context) {
     return "<table><tr><td class=${context.leftColumnClass}>Red Sox</td><td>${context.data}</td></tr></table>";
   }
}

...

var templateHere = MyTemplate();

...

var output = templateHere(context);

您还可以跳过间接级别并直接创建

String FillMyTemplate(Context context) => '''
    <html><head><title>$context.title</title></head>
''';

并在需要模板的地方使用 FillMyTemplate。

关于dart - 我可以动态应用 Dart 的字符串插值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886796/

相关文章:

android布局动态调整大小

Python 'string' % [1, 2, 3] 不会引发 TypeError

javascript - 如何在 JavaScript 中进行字符串插值?

google-maps - 当触摸集中在另一个小部件上时如何防止 SliverAppBar 滚动

flutter - 将类转换/转换为父类类型

firebase - 在Flutter中从Firebase检索用户电子邮件

dynamic - RollingFileAppender 中动态文件命名的 log4net 问题

flutter - 很棒的对话框无法在Flutter应用中关闭

C - 分配动态数组后无法接受输入

string - 如何在 Markdown Julia 中使用固定宽度的插值字符串格式?