3

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

做这个的最好方式是什么 ?

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

doc = {a: "hello"}

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

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

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

这是一个非常常见的用例,一些框架(EmberJs)具有神奇的绑定,每当小部件的值发生变化时都会修改模型。

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

4

1 回答 1

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);
    }, 
});
于 2012-12-14T01:30:01.733 回答