将用户输入的文本(输入)写回到其文档中(在mongo中)

时间:2012-10-18 23:36:31

标签: meteor

我有一个流星模板,用于呈现从mongo db中传出的文档。 文档的某些部分是可编辑的(它们呈现为html输入元素)。 现在我需要将数据流回文档(并进入mongo),

这样做的最佳方式是什么?

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

doc = {a: "hello"}

使用以下方法不太容易:doc.a [0] .z

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

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

这是一个非常常见的用例,有些框架(EmberJs)有 每当窗口小部件的值时修改模型的魔法绑定 变化。

这是如何在流星中完成的?

1 个答案:

答案 0 :(得分:2)

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

你可以做的一件事是将db查询分成一个函数,然后使用underscore.js对其进行去抖,就像这样(未经测试):

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);
    }, 
});