javascript - meteor 中如何使用模板生成动态 HTML 标签属性?

标签 javascript meteor html

我正在使用模板在 Meteor 中生成 HTML 标记属性,但它似乎已损坏。我无法将模板放入 meteor 中的 HTML 标记内我想知道为什么。

我正在使用 meteor-router用于路由。由于 meteor 基本上只允许单一布局,我想在 body 中添加一个类来指示当前 View 名称,如下所示:

/client/layout.html:

<head>
  <title>Meteor App</title>
</head>

<body {{> body-attributes}}>
  {{renderPage}}
</body>

<template name="body-attributes">data-view-name="{{page}}" class="{{page}}"<template>

这样我就可以在/client/layout.js 中执行此操作:

Template['body-attributes'].page = function () {
  return Meteor.Router.page();
};

但这没有用,我从应用程序中收到一条错误消息,指出不支持 body 上的属性。将 layout.html 更改为:

<head>
  <title>Meteor App</title>
</head>

<body>
  <div {{> body-attributes}}>
      {{renderPage}}
  </div>
</body>

<template name="body-attributes">data-view-name="{{page}}" class="layout-container {{page}}"<template>

导致完全损坏的 HTML。浏览器在页面前显示一个“>”,控制台元素面板如下所示: Console screenshots

为什么那行不通?

最佳答案

调用 {{> body-attributes}} 一个 HTML 标签(在你的例子中是 body 标签)最终意味着 Meteor 将注入(inject)一个 DocumentFragment在该位置进入 DOM。

为了 react 性,这些 DocumentFragments 不是模板中标记的原始复制品,而是包含在特殊的 Meteoresque react 性标签中,帮助后端引擎保持 Template 已更新。您可以通过调用 Template 函数并调查 _domFrag 的外观来看到这一点:

var _domFrag = Template.myTemplateName();

因此, meteor 上下文中的 Templates 并未设计为作为 HTML 标签的属性嵌入,因为它在标签本身中注入(inject)了额外的标签。你的第二次尝试更符合框架的工作方式。

希望这有助于解释这种行为。

关于javascript - meteor 中如何使用模板生成动态 HTML 标签属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072799/

相关文章:

javascript - TestCafe:检查图像

javascript - JS - 使用空格键更改元素的颜色

javascript - meteor 账号登录失败

html - 如何使输入高度变小? ionic 2

javascript - 为什么 grunt-contrib-imagemin 将 PNG 减少 80%,但 JPG 仅减少 <0.1%?

用于删除尾随的 Javascript

mongodb - Meteor 如何从 mongo 数据库检索一系列问题并在应用程序中仅显示其中一个问题

javascript - Meteor 不呈现 css 并在使用外部 DDP Meteor 实例时不断重新加载应用程序

java - 从输入流java读取html

jquery - 在同一页面添加多个星级