Firebase数据库:无法循环通过.push()' ed数组

时间:2016-07-23 20:41:07

标签: firebase firebase-realtime-database aurelia

将一些对象推送到Firebase同步数据库并检索它们后,我得到以下数组:

        public static Odds FromPercent(double percent)
        {
            int multiplier = GetDecimalMultiplier(percent);
            return new Odds(1, (multiplier - (int)(percent * multiplier)) / (int)(percent * multiplier));
        }

        private static int GetDecimalMultiplier(double n)
        {
            if (n > 0.01)
            {
                return 100;
            }
            if (n > 0.001)
            {
                return 100000;
            }
            if (n > 0.0001)
            {
                return 100000000;
            }
            throw new Exception("Number too small!");
        }

使用Firebase的.push()时,Firebase会生成一个随机ID,例如上面的那个。

尝试用Aurelia循环它们(使用repeat.for)

(index)                 products    time

-KNOR5bBgf1ilVehk7BI    Array[1]    "22:26:47"
-KNORdccyvXat8wsP0SF    Array[2]    "22:29:10"

我收到以下错误

<order-details repeat.for="order of bill.orders" order.bind="order"></order>

我很确定它与键(索引)有关,因为之前我使用了增量索引(0,1,2,3,...)并且它工作得很好。 编辑:我已经尝试过其他键,例如&#34; 0&#34;和2他们也不工作。似乎Aurelia只知道如何重复以0 ???开头的数组

为什么会这样?

1 个答案:

答案 0 :(得分:4)

您正在尝试使用repeat.for循环对象而不是数组。您需要将其转换为数组以重复对象的属性。请参阅此文章:http://ilikekillnerds.com/2015/08/iterating-objects-using-repeat-for-in-aurelia/

当你将它们更改为0,1,2时,javascript将其读作:

orders[0]
orders[1]

Javascript将其视为数组。

你拥有的是:

orders['-KNOR5bBgf1ilVehk7BI']
orders['-KNORdccyvXat8wsP0SF']

Javascript将此视为对象。如果没有使用Aurelia的repeat.for。

的值转换器,则无法遍历对象的属性

由于必须通过值转换器,您可能需要设置绑定单元来告诉repeat.for更新。你可以在这里找到一个简单的例子:Update Aurelia observed property on change to containing array