无法使Firebase update()与提供的对象一起使用

时间:2014-04-24 12:22:57

标签: javascript angularjs firebase angularfire

好的,经过大量的试验和错误,我不得不尝试在这里询问。 我正在尝试更新Firebase条目,我的代码看起来像这样,

这是来自我的service.js:

//This dosn't work
var updateItem = function (item, id) {
    var ref  = new Firebase(FIREBASE_URI + '/lessons/' + id);
    ref.$update(item);
}

//This works (items is a ref to new Firebase(FIREBASE_URI + '/lessons/');
var addItem = function (item) {
    items.$add(item);
}

这是来自我的控制器:

$scope.updateLesson = function (item) {
    LessonsService.updateLesson(item, id);
}

我得到的错误是:

错误:Firebase.set失败:第一个参数包含无效键($ id)。键必须是非空字符串,不能包含“。”,“#”,“$”,“/”,“[”或“]”

我传递的对象如下:

Object {
    $id: "-JLIUvVMLqoCVgHaed9f", 
    $bind: function, $add: function, $save: function,     $set: function…}
    $add: function (item) {
    $auth: function (token) {
    $bind: function (scope, name, defaultFn) {
    $child: function (key) {
    $getIndex: function () {
    $getRef: function () {
    $id: "-JLIUvVMLqoCVgHaed9f"
    $off: function (type, callback) {
    $on: function (type, callback) {
    $remove: function (key) {
    $save: function (key) {
    $set: function (newValue) {
    $transaction: function (updateFn, applyLocally) {
    $update: function (newValue) {
    createDate: "2014-04-24T11:29:42.692Z"
    desc: "test"
    somemorevalues: "here"
}

我试图在对象上做一个JSON.stringify,并得到一个看起来很漂亮的结果:

 {
  createDate: "2014-04-24T11:29:42.692Z",
  desc: "test",
  somemorevalues: "here"
 }

但是当我通过一个变量传递它时它不会接受它。 (错误:Firebase.update失败:第一个参数必须是包含要替换的子项的对象。)如果我直接将其作为字符串传递它,它(?!!!)。这是变量中完全相同的信息..我到底错过了什么?!截至目前,我正在构建我自己的对象:

 var newItem = {
     title: item.title,
     desc: item.desc,
     ingress: item.ingress,
     workarea: item.workarea,
     years: {val: item.years.val},
 }

并将其传递给firebase,它起作用但不理想,因为它的“静态”。

2 个答案:

答案 0 :(得分:3)

根据the API使用angularFire。阅读Angular+Firebase Overview以获得良好的入门读物。

实质上,不是将angularFire对象传递给Firebase引用(由于键名称中没有$,因此无法工作)并自行调用update / set,只需使用$set / {{1 $ firebase对象上已有的方法:

$update

答案 1 :(得分:0)

不确定它是否只是一个拼写错误,但你在年份值之后有一个逗号(在下面删除它)。

var newItem = {
    title: item.title,
    desc: item.desc,
    ingress: item.ingress,
    workarea: item.workarea,
    years: {val: item.years.val}
 }

因为它认为它试图在多年后传递一个空键,因此给出错误。