Meteor 将用户输入的文本(输入)写回其中';s文件(蒙哥文)

Meteor 将用户输入的文本(输入)写回其中';s文件(蒙哥文),meteor,Meteor,我有一个meteor模板,呈现一个来自mongo db的文档。 文档的某些部分是可编辑的(它们呈现为html输入元素)。 现在我需要数据流回到文档(和mongo) 最好的方法是什么 如果我想写回doc.a的值,答案很简单: doc={a:“你好”} 使用:doc.a[0].z不太容易 doc={a:[{z:{hello}]} 因为要进行更新,必须记住路径 以编写update语句。 每当字段更改时更新整个文档看起来很简单, 但效率低下 这是一个极为常见的用例,一些框架(EmberJs)提供了 神奇

我有一个meteor模板,呈现一个来自mongo db的文档。 文档的某些部分是可编辑的(它们呈现为html输入元素)。 现在我需要数据流回到文档(和mongo)

最好的方法是什么

如果我想写回doc.a的值,答案很简单:

doc={a:“你好”}

使用:doc.a[0].z不太容易

doc={a:[{z:{hello}]}

因为要进行更新,必须记住路径 以编写update语句。 每当字段更改时更新整个文档看起来很简单, 但效率低下

这是一个极为常见的用例,一些框架(EmberJs)提供了 神奇的绑定,每当小部件的值 变化


在meteor中是如何做到这一点的?

正如您所指出的,每当输入发生变化时,运行db update命令可能效率低下。对于可拖动的元素(如滑块)尤其如此

您可以做的一件事是将db查询分离为一个函数,然后使用如下方法(未经测试)对其进行解块:

让这更容易的是(该链接还提到了一些用户贡献的表单包)。
var debouncedUpdate = _.debounce(function(newObject) {
    CollectionName.update({_id: newObject._id},newObject);
},300,true);

Template.objectInput.events({
    'keydown #text-input': function(event) {
        var newValue = $(this.find('#text-input')).val();
        var self = this;
        self.value = newValue;
        debouncedUpdate(self);
    }, 
});