Couchapp:如何存储文件?

时间:2011-02-13 09:22:42

标签: javascript couchdb couchapp

完成couchapp tutoria l后,必须完成最后一步:保存创建的披萨。

为此我创建了一个JS函数“saveToppings”,它被执行(如firebug控制台所示),但是在保存我的JSON文档时失败了:

  

无法保存文档:文档必须是JSON对象。

所以我理解,我的doc不是JSON doc,但我不知道如何正确地做到这一点。

以下是“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"}]}

1 个答案:

答案 0 :(得分:2)

所以,只是搞清楚了。

我扩展了调试以使用

从“toppings”对象中获取对象类型
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!");
    }
  });
}