0

我有一个数组,我需要填充多个'properties',如下所示:

[
    {
        name: 'Date',
        value: '27 Oct'
    },
    {
        name: 'Type',
        value: 'Image'
    },
    {
        name: 'Client',
        value: 'Apple'
    }
]

我想列出所有内容propertiesul并且我想要一个+按钮,它将向数组中添加一个新对象(最初将是空白的)namevalue双击每个项目(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);

但是当我开始输入时,它会覆盖我写的内容并且不会保存新值..

任何想法,任何人?

4

1 回答 1

2

您应该将原始数组保留为数据模型,将其传递给PropertiesProperties仅存储可编辑状态。这是一个很好的数据分离,将简化代码。它也可以解决保存问题,因为它可以直接在onkeyup事件中设置数组值。

对于覆盖问题,也许添加一个key属性会起作用?好像有关系。查看http://mithril.js.org/mithril.html#dealing-with-focus了解更多信息。

于 2015-10-27T22:28:36.797 回答