Meteor:使用<input />字段

时间:2015-08-22 14:43:34

标签: javascript mongodb meteor

我遇到了MeteorJS和onInput事件对MongoDB文档的影响。

在DB中我有一个Collection,其元素每个都包含一个数组。该数组包含具有idinputValue属性的对象。我想在HTML inputValue字段中显示每个对象的input。我还希望当用户删除输入字段的所有内容时,数组中的相应对象将被删除(通过onInput事件),并且数组的内容将被重新显示。

这在Meteor中应该是直截了当的,下面是我正在使用的代码。但是我遇到了以下问题:

当数组中的两个或多个对象最初具有相同的inputValue时(例如在下面的代码中:两个“aaa”字符串),数组不会被正确地重新显示。我希望留下一个包含“aaa”的输入字段,但该字段为空。

当它是被删除的最后一个相同输入值(在这种情况下是第二个“aaa”)时,也不会发生这种情况,也不会在值不同时更改(在“aaa”的代码中更改)以“aba”为例,使其按预期工作)。请注意,输入字段外部的文本会正确更新,因此数据库本身也是如此。

main.html中

<body>
    {{#with getData}}
    <form>
        {{#each array1}}
            <input id="{{id}}" type="text" value="{{inputValue}}"> 
            (id:{{id}}, inputValue: {{inputValue}})<br>
        {{/each}}
    </form>
    {{/with}}
</body>

main.js

MyCollection = new Meteor.Collection('myCollection');

Meteor.methods({
    delete: function (colId, subItemId) {
        MyCollection.update({id: colId}, {$pull: {array1: {id: subItemId}}});
    }
});

if (Meteor.isServer) {
    // make sure collection is empty then insert 1 document
    if (MyCollection.find().count() !== 0) {
        MyCollection.remove({id: 101});
    }
    MyCollection.insert({
        id: 101,
        array1: [
            { id: 1, inputValue: "aaa" },
            { id: 2, inputValue: "aaa" }
        ]
    });
}

if (Meteor.isClient) {
    Template.body.helpers({
        getData: function () {
            if (MyCollection.findOne({})) { // wait until collection is available
                return MyCollection.findOne({id: 101});
            }
        }
    });
    Template.body.events({
        "input input": function (event) {
            if ($(event.target).val() == "") {
                Meteor.call("delete", 101, Number($(event.target).attr("id")));
            }
        }
    });
}

这是一个错误还是我错过了什么?我是Meteor的新手,所以我首先在这里发布这个问题。我正在使用Meteor 1.1.0.3,一个新的默认项目,并在最新版本的Safari和Firefox上尝试过这个。

0 个答案:

没有答案