- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 JavaScript 框架 Mithril,我尝试在创建和渲染初始主体之后添加新元素。
这是我最基本的问题:
let divArray = [];
let newDivButton = m('button', { onclick: ()=> {
divArray.push(m('div', "NEW DIV PUSHED"));
}}, "Add new div");
divArray.push(newDivButton);
divArray.push(m('div', "NEW DIV PUSHED"));
let mainDiv = {
view: () => {
return divArray;
}
}
m.mount(document.body, mainDiv);
上面的代码将创建一个按钮和一行行文本,内容为NEW DIV PUSHED
。该按钮添加一个新文本元素,与第一个文本元素完全相同。这里的问题是,即使调用了 view 函数,这些附加元素也不会被渲染。我进入代码并清楚地看到我的 divArray 正在被填充,即使它们没有渲染。
我注意到的一件事是,初始文本元素(呈现的元素)的 dom
属性由实际的 div
对象填充。我的数组中的所有后续文本元素的 dom
属性都设置为 undefined
。我不知道如何解决这个问题,但我确信它与我的问题有关。
最佳答案
Mithril 在渲染生命周期中内置了优化 - it won't re-render a DOM tree if the tree is identical to the last tree 。由于 divArray === divArray
始终为 true
,因此节点永远不会重新渲染。
简单但非理想的解决方案是切片
你的数组,这样你总是从mainDiv#view
返回一个新数组,因此,Mithril将始终重新-渲染顶级数组:
let mainDiv = {
view: () => {
return divArray.slice();
}
};
更正确的方法是映射数据,在 View 层创建 vnode,而不是在模块中静态保留 vnode 列表范围:
let data = ["Data Available Here"];
let mainDiv = {
view: () => {
return [
m(
'button',
{ onclick: () => data.push("Data Pushed Here") },
"Add new div"
);
].concat(
data.map(datum => m('div', datum))
);
}
};
关于javascript - 使用 Mithril 在运行时创建新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47492422/
我正在用 Java 编写代码,并且使用 Vaadin 8 扩展。 我有一个 Vaadin 组合盒,效果很好。但我不仅想从组合框中选择项目,还想选择书面输入。这意味着我想使用组合框作为下拉菜单以及文本编
我正在尝试将 AJAX 添加到 JQuery ListView 中并呈黄色闪烁,但我似乎无法使其正常工作。谁能指出我正确的方向? http://jsfiddle.net/zFybm/ 最佳答案 根据
我有这个样式表: .pixel{ position: absolute; height: 10px; width: 10px; background-color: #f
这是我用来将新行推送到容器的一行代码: this.$el.append(new ItemView(item).render().el); 其中item是Backbone.js model,render
我正在尝试在 anguar.js 中制作一些测试应用程序,但遇到了问题。我的 js 文件包含: live = angular.module('live',[]); live.controller('p
如何绑定(bind)页面加载后创建的新元素? 我有这样的东西 system = function() { this.hello = function() { alert
html5 新元素(页眉、导航、页脚等)在 IE 中不工作 最佳答案 您需要包含 HTML5 shiv 脚本以允许在旧版 IE 浏览器中设置 HTML5 元素的样式:http://code.googl
我是一名优秀的程序员,十分优秀!