将可编辑的动态对象添加到Mithriljs中的数组中
Add editable dynamic objects to an array in Mithriljs
我有一个数组,需要用多个'properties'
填充,类似于以下内容:
[
{
name: 'Date',
value: '27 Oct'
},
{
name: 'Type',
value: 'Image'
},
{
name: 'Client',
value: 'Apple'
}
]
我想列出ul
中的所有properties
,并且我想有一个+
按钮,它将向数组添加一个新对象(最初name
和value
将为空)。双击每个项目(在本例中为li
)后,我想使这些properties
可编辑。
所以我做了这样的事情:
var Properties = {};
Properties.items = [
{
name: m.prop('Date'),
value: m.prop('21 Dec'),
editable: m.prop(false)
}
];
这是我的初始数组。
然后,我有一个控制器:
Properties.controller = function() {
this.addNewItem = function() {
Properties.items.push({
name: m.prop('Sample'),
value: m.prop('Test'),
editable: m.prop(false)
})
};
this.toggleEditable = function(item) {
item.editable(!item.editable());
console.log(item.editable());
};
};
我的观点:
Properties.view = function(ctrl) {
return m('ul.list-unstyled', [
Properties.items.map(function(item) {
return m('li', [
item.editable() ? m('input', {
value: item.name(),
onkeyup: function(e) {
if(e.keyCode == 13) {
ctrl.toggleEditable.bind(ctrl, item);
} else {
m.withAttr('value', item.name)
}
}
}) :
m('span', {
ondblclick: ctrl.toggleEditable.bind(ctrl, item)
}, item.name()),
m('span', ': '),
m('span', item.value())
]);
}),
m('div',{
onclick: ctrl.addNewItem.bind(ctrl)
}, '+')
]);
};
最后:
m.mount(document.querySelector('.container'), Properties);
但当我开始打字时,它会覆盖我写的内容,不会保存新值。。
有什么想法吗?
您应该保留原始数组作为数据模型,将其传递给Properties
,并让Properties
只存储可编辑状态。这是一个很好的数据分离,将简化代码。它也可以解决保存问题,因为它可以直接在onkeyup
事件中设置数组值。
对于覆盖问题,添加key
属性是否可行?这似乎有关联。退房http://mithril.js.org/mithril.html#dealing-关注更多信息。
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在函数中添加数组元素的数值
- 无法通过数组映射绑定
- javascript中的数组出错
- 如何使用 node.js 比较两个 json 数组
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 根据id将json数组组合为一个json数组
- 如何通过数组更新角度子范围
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 在Javascript中转换对象数组
- 将可编辑的动态对象添加到Mithriljs中的数组中