1

複数のドキュメントのフィールドを同時にループして変更する関数を作成しようとしています。唯一の問題は、パラメーター値を渡すときに、クレードルマージが、値ではなくパラメーター名を持つフィールドを実際に渡すように見えることです。

例えば:

function saveToAll(field, data) {
  db.get('document_list', function (err, doc) {
      for (key in doc.doc_list_pure) {
        //Create a Closure
        (function(key1) {
          console.log(key1)
            //Go into the DB
            console.log(field);
            console.log(data);
             db.merge(key1, {
              field : data
            }, function (err, res) {
                console.log('Saved');
            });
         }
        )(key)
      }
});
}

したがって、ここで、次のような関数を作成すると、次のようになります。

saveToAll("new_field", value);

正しくログに記録されますが、文字通り「field」と呼ばれるフィールドを正しいデータで保存します。誰かがこれにアプローチする方法のアイデアを持っていますか?これはゆりかごのバグですか、それとも私だけですか?

4

1 に答える 1

1

これを試して:

function saveToAll(field, data) {
  db.get('document_list', function (err, doc) {
      for (key in doc.doc_list_pure) {
        //Create a Closure
        (function(key1) {
          console.log(key1)
            //Go into the DB
            console.log(field);
            console.log(data);
            var dataObj = {};
            dataObj[field]=data;

            db.merge(key1, dataObj, function (err, res) {
                console.log('Saved');
            });
         }
        )(key)
      }
});
}
于 2013-03-25T20:51:36.007 に答える