2014-12-03 2 views
0

Я делаю веб-приложение, которое позволяет пользователю вырастить дерево. Когда пользователь удобряет дерево, атрибут «удобрение» должен увеличиваться. Тем не менее, приложение продолжает давать мне ошибку, потому что она решила, что «удобрение» не определено.Ошибка: Firebase.update не удалось: первый аргумент содержит NaN в свойстве

Функция счет обновления выглядит следующим образом:

function updateScore(){ 
    if (usr!=null){ 
     var tree = $firebase(new Firebase("https://myapp.firebaseio.com/trees/"+usr.treeid)); 
     var usrTree = tree.$asObject(); 
     var data = null; 
     if (typeof usrTree.data !== 'undefined'){ 
      data = usrTree.data; 
     } 
     console.log(usrTree); 
     console.log(usrTree.$id); 
     console.log(usrTree.uid); 
     console.log(usrTree.fertilizer); 
     tree.$update({fertilizer: usrTree.fertilizer+1}); 
     } 
    } 
} 

Так консоль дает следующие результаты:

e {$$conf: Object, $id: "-JcDm0UlYVGFfFAX0GSf", $priority: null, $save: function, $remove: function…} 
$$conf: Object 
$id: "-JcDm0UlYVGFfFAX0GSf" 
$priority: null 
fertilizer: 0 
level: 0 
pesticide: 0 
sunshine: 0 
uid: "simplelogin:6" 
water: 0 
__proto__: Object 

-JcDm0UlYVGFfFAX0GSf 

undefined 

undefined 

Я считаю, что первое из них является usrTree объект, второй из них является $id и третий и четвертый должны быть uid и fertilizer, но пойманы не определены. Однако, в usrTree объекта, uid и fertilizer действительно показать, как это определено, и они существуют в firebase горна:

Что я здесь делаю неправильно ?? Что делать, чтобы обновлять данные?

ответ

1

Оказалось, что мне нужно использовать $ loaded. Я изменил код на следующий, и теперь он работает.

var tree = $firebase(FirebaseRef.child("trees").child(usr.treeid)); 
var usrTree = tree.$asObject(); 
usrTree.$loaded().then(function() { 
    tree.$update({fertilizer: usrTree.fertilizer + 1}); 
} 
+2

Вы также хотите использовать [сделку] (https://www.firebase.com/docs/web/guide/saving-data.html#section-transactions) здесь, чтобы обеспечить одновременное обновление все правильно подсказано. – Kato

Смежные вопросы