2016-07-01 4 views
0

私はこのようなカスタムオブジェクトがあります。PouchDb put(doc)メソッドが自分のパラメータを編集しているのはなぜですか?

function BlobModel(id){ 
    this._id = id; 
    this._rev = null; 
    this.filename = ''; 
    this.index = ''; 
    this.data = ''; 
} 

私は私のポーチデータベースに入れた場合、それは正常に動作しますが、私はこれを行う場合、私は、奇妙な問題があります。

var myDoc = new BlobModel('myId'); 

db.put(myDoc).then(function(){ 
    console.log(myDoc); 
}) 

コンソールを。結果ログ:私は_rev値_rev_tree財産myDocパラメータに追加しましなぜ enter image description here を、それだけデシベル内部文書に追加する必要があります。なぜネイティブオブジェクトと同じ動作ではないのですか?それを修正するには?私が見る唯一の方法は、それを置く前に私のオブジェクトを複製することですが、重いオブジェクトでは変です。

私はネイティブオブジェクトでそれを行う場合、それは変更されません。

var myDoc = { 
    _id: 'myId', 
    _rev: null, 
    filename: '', 
    index: '', 
    data: '' 
} 

db.put(myDoc).then(function(){ 
    console.log(myDoc); 
}); 

答えて

1

PouchDBは、プレーンJavaScriptオブジェクトをドキュメントとして挿入することを想定しています。カスタムクラスを挿入しようとすると、クローニングアルゴリズムはそれを無視して、奇妙なエラーが発生するようになります。

JSON.parse(JSON.stringify(myDoc))をPouchDBに挿入する前に実行することをお勧めします。どちらか、またはカスタムクラスを使用しないでください。

+0

助けてくれてありがとう、私は私のカスタムクラスのメソッドにPlainObject()を追加します。 – sylvain1264

1

JSであり、オブジェクトの間にはほとんど違いがあり、そしてPouchDBはインデックスsee hereを管理するために、礼儀を挿入します。

あなたがこれを行うことができます。..

db.put({ mydoc: myDoc }) 

をそれは本当に問題ですか?

+0

本当に助けてくれてありがとうございます。なぜ私がネイティブオブジェクトでこの動作をしていないのかを正確に知りたいのですが。私はPouchDbがプロパティを挿入することを知っていますが、私はパラメータに入れたオブジェクトを直接変更しません。 – sylvain1264

関連する問題