Couchapp: как хранить документ? - PullRequest
2 голосов
/ 13 февраля 2011

после завершения урока couchapp l необходимо сделать последний шаг: сохранить созданную пиццу.

Для этого я создал 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"}]}

1 Ответ

2 голосов
/ 13 февраля 2011

Итак, просто разобрался.

Я расширил отладку, чтобы получать типы объектов из моих "начальных" объектов с помощью

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!");
    }
  });
}
...