3

mongo db から出てくるドキュメントをレンダリングする流星テンプレートがあります。ドキュメントの一部は編集可能です (それらは html 入力要素としてレンダリングされます)。ここで、データをドキュメント (および mongo) に戻す必要があります。

これを行う最善の方法は何ですか?

doc.a の値を書き戻したい場合、答えは簡単です。

doc = {a: "hello"}

doc.a[0].z では簡単ではありません

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

更新を行うには、更新ステートメントを記述するためにパスを覚えておく必要があるためです。フィールドが変更されるたびにドキュメント全体を更新するのは簡単に見えますが、非効率的です...

これは非常に一般的な使用例です。一部のフレームワーク (EmberJ) には、ウィジェットの値が変更されるたびにモデルを変更する魔法のバインディングがあります。

これは流星でどのように行われますか?

4

1 に答える 1

2

ご指摘のとおり、入力が変更されるたびに db update コマンドを実行するのはおそらく非効率的です。これは、スライダーなどのドラッグ可能な要素に特に当てはまります。

できることの 1 つは、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 に答える