Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用聚合物设置Firebase数据阵列的值_Arrays_Firebase_Polymer_2 Way Object Databinding - Fatal编程技术网

Arrays 使用聚合物设置Firebase数据阵列的值

Arrays 使用聚合物设置Firebase数据阵列的值,arrays,firebase,polymer,2-way-object-databinding,Arrays,Firebase,Polymer,2 Way Object Databinding,问题: 我想尝试在Firebase的根目录下运行多个游戏,它们都有Firebase生成的id, 当我试图使用获取它们时,我总是得到一个对象数组,使用聚合物进行双向绑定非常困难。 是否有办法将Firebase数据作为对象获取? 我试图将数据添加为object属性,但没有成功,我还得到了一个数组。 我甚至尝试使用元素,只需将表单更改为,但随后更新游戏数据并没有推送到firebase。 我不知道这是否可能 还是有一种好的双向绑定方法? 我无法使用数组项的索引,例如:this.set('gameData

问题:
我想尝试在Firebase的根目录下运行多个游戏,它们都有Firebase生成的id,
当我试图使用
获取它们时,我总是得到一个对象数组,使用聚合物进行双向绑定非常困难。
是否有办法将Firebase数据作为对象获取?

我试图将
数据添加为object
属性,但没有成功,我还得到了一个数组。
我甚至尝试使用
元素,只需将表单
更改为
,但随后更新游戏数据并没有推送到firebase。
我不知道这是否可能

还是有一种好的双向绑定方法?
我无法使用数组项的索引,例如:
this.set('gameData.+I)
,因为当我尝试修改数组中对象下的值时,我会得到错误
未捕获错误:意外键2

完整代码

我的代码:
数据提供者:


聚合物({
是:“tmp游戏数据”,
特性:{
数据:{
通知:正确
}
}
});
游戏元素:


var块=[]//地图块,全球访问
聚合物({
是:“tmp游戏”,
特性:{
游戏数据:{
通知:正确
},
游戏:{
通知:正确
},
配子体:{
类型:字符串
}
},
startGlobalGame:函数(e){
var gameId=getRandomString(6);
此.set('gameId',gameId);
var player={id:/*playerId*/};
var players=[player];
这个.push('gamesData'{
gameId:gameId,
maxPlayers:e.detail.maxPlayers,
球员:球员
});
这个。选择game();
//生成地图
},
joinGame:函数(e){
var gameId=e.detail.gameId;
for(var i=0;i
我认为没有一种方法可以将数据作为对象而不是数组进行操作

在代码段中,您没有指定
数据
游戏数据

您必须使用Polymer API来操作通过数据绑定获得的数组,如
this.push
this.splice
,等等。。。就像你已经做的那样


您还应该能够
this.set('gamesData.+i+'.map',map)如前所述

我删除了
以简化代码我认为
属性
数据是对象
,但不幸的是它不起作用。。。哦,是的,我已经添加了它,但是当我没有定义类型时,这有关系吗?问题是,当您使用firebase时,您不能使用
拼接
,因为firebase随后会创建一个具有更改属性的新对象,并将要删除的元素保留在其服务器上。。。最后,我将在
this.set('gamesData.+I+'.map',map)上得到一个错误(添加在上面)<firebase-collection location="https://***.firebaseio.com" 
                     data="{{data}}" data-as-object log>
</firebase-collection>
<!-- script -->
Polymer({
    is: 'tmp-game-data',
    properties: {
        data: {
            notify: true
        }
        }
});
<!-- map with several players(Array), -->
<!-- an player(Object) has some properties -->
<!-- on-map-ready, when the map is fully configured --> 
<tmp-map players="{{game.players}}" 
         on-map-ready="_mapReadyCallback">
</tmp-map>
<!-- menu user for creating and -->
<!-- joining games with selected settings -->
<tmp-menu on-start-global-game="startGlobalGame" 
          on-join-game="joinGame">
</tmp-menu>
<tmp-game-data data="{{gamesData}}"></tmp-game-data>
<!-- script -->
var blocks = []; //Map blocks, global access

Polymer({
    is: 'tmp-game',

    properties: {
        gamesData: {
            notify: true
        },
        game: {
            notify: true
        },
        gameId: {
            type: String
        }
    },

    startGlobalGame: function(e) {
        var gameId = getRandomString(6);
        this.set('gameId', gameId);

        var player = {id: /*playerId*/};
        var players = [player];

        this.push('gamesData', {
            gameId: gameId,
            maxPlayers: e.detail.maxPlayers,
            players: players
        });

        this.selectGame();

        //generate map
    },

    joinGame: function(e) {
        var gameId = e.detail.gameId;
        for (var i = 0; i < this.gamesData.length; i++) {
            if(this.gamesData[i].gameId === gameId) {
                var map = this.get('gamesData.' + i + '.map');
                //generate map with the map of the game
            }
        }
        this.selectGame();
    },

    selectGame: function() {
        for (var i = 0; i < this.gamesData.length; i++) {
            if(this.gamesData[i].gameId === this.gameId) {
                this.set('game', this.gamesData[i]);
                this.linkPaths('game', 'gamesData.' + i);
            }
        }
    },

    _mapReadyCallback: function(e) {
        for (var i = 0; i < this.gamesData.length; i++) {
            if(this.gamesData[i].gameId === this.gameId) {
                //get the map as a json
                var map = JSON.stringify(blocks);
                this.set('gamesData.' + i + '.map', map);
            }
        }
    }
});