2

couchapp チュートリアルを終了したら、そこからの最後のステップを実行する必要があります: 作成したピザを保存します。

このために、JS 関数「saveToppings」を作成しました。これは (firebug コンソールが示すように) 実行されますが、JSON ドキュメントを保存すると次のメッセージが表示されて失敗します。

ドキュメントを保存できませんでした: ドキュメントは JSON オブジェクトである必要があります。

私のドキュメントはJSONドキュメントではないことは理解していますが、これを適切に行う方法がわかりません。

「saveToppings」関数のコードは次のとおりです。

function(e){
var json_toppings = JSON.stringify($$(this).toppings);
var merged_toppings = "{ \"type\":\"topping\", \"contents\":" + json_toppings + "}";

$.log('json_toppings: '+ json_toppings.toString());

$.log('merged_toppings: '+ merged_toppings.toString());

$$(this).app.db.saveDoc(merged_toppings, {
    success : function() {
      alert("Doc saved successfully.");
    }
  });
}

...そしてコンソールからのデバッグ:

json_toppings: [{"top":"tomatoes"},{"top":"bacon"},{"top":"cheese"}]
merged_toppings: { "type":"topping", "contents":[{"top":"tomatoes"},{"top":"bacon"},{"top":"cheese"}]}
4

1 に答える 1

2

それで、ちょうどそれを理解しました。

「トッピング」オブジェクトからオブジェクトタイプを取得するためにデバッグを拡張しました

Object.prototype.toString.call(merged_toppings)

...そしてそれらは文字列です。だから私は今jqueryを使ってJSONオブジェクトを作成しています:

var JSONtoppings = jQuery.parseJSON( merged_toppings );

...そしてそれは働いています。完全なコードは次のとおりです。

function(e){
var json_toppings = JSON.stringify($$(this).toppings);
var merged_toppings = "{ \"type\":\"topping\", \"contents\":" + json_toppings + "}";

var JSONtoppings = jQuery.parseJSON( merged_toppings );

$.log('json_toppings: '+ json_toppings.toString());
$.log('json_toppings type: ' +  Object.prototype.toString.call(json_toppings)); 
$.log('merged_toppings: '+ merged_toppings.toString());
$.log('merged_toppings type: ' + Object.prototype.toString.call(merged_toppings)); 
$.log('JSONtoppings: '+ JSONtoppings);
$.log('json_toppings type: ' + Object.prototype.toString.call(JSONtoppings));

$$(this).app.db.saveDoc(JSONtoppings, {
    success : function() {
      alert("Clicked the save buttoN!");
    }
  });
}
于 2011-02-13T09:26:25.193 に答える