好吧,经过多次尝试和错误,我必须尝试在这里提问。 我正在尝试更新 Firebase 条目,我的代码如下所示,
这是来 self 的 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);
}
这是来 self 的 Controller :
$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,它可以工作,但并不理想,因为它是“静态的”。
最佳答案
根据 the API 使用 angularFire 。阅读Angular+Firebase Overview一个好的底漆。
本质上,不需要将 angularFire 对象传递到 Firebase ref(这将不起作用,因为键名称中可能没有 $)并自己调用 update/set,只需使用 $set
/$update
方法已在 $firebase 对象上可用:
var ref = $firebase(URL);
ref[id].desc = 'foo';
ref.$save(id).then(onComplete);
关于javascript - 无法让 Firebase update() 使用提供的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23268771/