Material Design Lite Table - 动态添加行会破坏格式

Material Design Lite Table - Adding Rows Dynamically Breaks Format

这是使用 material-design-lite 的复选框标记:

<label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect" for="checkbox">
  <input type="checkbox" id="checkbox" class="mdl-checkbox__input" />
  <span class="mdl-checkbox__label">Checkbox</span>
</label>

问题是,标签 for 连接到输入 id

所以当我动态添加一个新的复选框时,我还必须添加一个 id。但是我如何找出要添加的 Id 呢?当我稍后将这些行添加到数据库中时,这不会成为问题吗?

这是工作示例:

http://codepen.io/anon/pen/QjNzzO

注意您添加的新任务的复选框

将复选框添加到 DOM 后,您需要调用 componentHandler.upgradeElement(el)。我不熟悉 vue.js,所以我无法建议所需的具体代码更改,但是这个 article 似乎有答案。

我个人的做法是创建一个组件。我在 coffeescript 和 jade

中有一个工作 here

基本上你需要调用componentHandler.upgradeElements(el)。上次我检查这还不够,因为它没有添加连锁反应,所以你还需要升级 lastChild。请注意 componentHandler.upgradeElement(el)componentHandler.upgradeElements(el) 有区别,如果我没记错的话,深入 dom.

关于 id 的问题,您应该只使用 $index。我更新了 codepen,它解决了你的问题,我会回来帮助你处理复选框的样式(最初不是问题)。

http://codepen.io/anon/pen/dYMBqj?editors=101

如前所述,您需要升级元素。您可以调用 componentHandler.upgradeDom() 而不是 componentHandler.upgradeElement().

http://codepen.io/pespantelis/pen/pjbvBL

Material Design Lite 将在页面加载时自动注册并呈现所有标记有 MDL 类 的元素。但是,在动态创建 DOM 元素的情况下,您需要使用 upgradeElement 函数注册新元素。

要升级所有元素,请使用此代码:

componentHandler.upgradeAllRegistered();

http://www.getmdl.io/started/index.html#dynamic

How Component Handler works?