我遇到了MeteorJS和onInput事件对MongoDB文档的影响。
在DB中我有一个Collection,其元素每个都包含一个数组。该数组包含具有id
和inputValue
属性的对象。我想在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上尝试过这个。