1

数値の優先順位で子を並べ替え (交換) しようとしています。これが私の試みです:

var swapChildrenByPriority = function(url, child1Priority, child2Priority){
  var ref = new Firebase(url);
  var child1, child2;
  ref.on('value', function(snap){
    snap.forEach(function(child){
      if(child.getPriority() === child1Priority){
        child1 = child;
      };
      if(child.getPriority() === child2Priority){
        child2 = child;
      };
    });
  });
  ref.child(child1.name()).setPriority(child2.getPriority());
  ref.child(child2.name()).setPriority(child1.getPriority());
};

ご想像のとおり、これは機能しません。この関数が呼び出されると、Chrome のコンソールでエラーがスローされます。

TypeError: Cannot call method 'name' of undefined
Uncaught TypeError: Cannot call method 'name' of undefined

子に優先順位が設定されていないかのように見えます。Forge にデータをインポートすると、すべての子にプロパティ ".priority" : 5.0 が設定されます。
そして、関数をもう一度呼び出すと、念のため、次のようになります。

TypeError: Object https://test.firebaseio.com/testPriority has no method 'child'

firebaseでこれを行う正しい方法は何ですか?
また、AngularFire サービスを使用しているディレクティブのスコープ内のデータがそれに応じて並べ替えられ、ビューが更新されるように、AngularFire で同じことを行う方法は?

お時間をいただき、
誠に
ありがとうございます。

4

1 に答える 1

4

DB からのコールバック内に関数を配置します。

fb.on('value', function(snap){
    snap.forEach(function(child){
        if(child.getPriority() === child1Priority) {
            child1 = child;
        }
        if(child.getPriority() === child2Priority){
            child2 = child;
        };
    });
    ref.child(child1.name()).setPriority(child2.getPriority());
    ref.child(child2.name()).setPriority(child1.getPriority());
});
于 2013-08-28T02:31:17.430 に答える