2014-04-24 52 views
2

好吧,經過大量的試驗和錯誤之後,我必須嘗試在此處詢問。 我試圖更新火力地堡入口和我的代碼看起來像這樣,無法獲取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}, 
} 

並傳遞沿到火力點,其作品,但並不理想,因爲它的「靜」。

回答

3

根據the API使用angularFire。閱讀Angular+Firebase Overview獲得一個好的底漆。

在本質上,而不是傳遞angularFire對象到火力地堡REF(這是行不通的,因爲鑰匙可能沒有名稱的$),並調用update /自己設定,只需使用上已經提供的$set/$update方法$火力對象:

var ref = $firebase(URL); 
ref[id].desc = 'foo'; 
ref.$save(id).then(onComplete); 
+0

嗯,我不能得到它的工作。 $ add函數對傳入的項目正常工作。但不是$更新。 –

+0

在您的示例中,您沒有在任何地方調用$ update,因此很難提供很多幫助。 – Kato

+0

哦,對不起。我粘貼了錯誤的代碼。我正在修補試圖讓它工作。它不應該是.set()它應該是.update()。 –

0

不知道如果它只是一個錯字,但你已經有了多年的值(以下刪除它),後一個逗號。

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

因爲它認爲它試圖在多年後通過一個空的鍵,因此給出錯誤。

相關問題