2016-02-15 19 views
0

所以我想在我储存其他列表协作列表对象中,如:谷歌的实时API - 访问阵列的合作名单

var tasks = model.createList(); 
tasks.pushAll([['Do', 'Buy', 'go'], ['1', '23', '44', '21']]); 

我的问题是:我如何访问这些元素?通常情况下,类似于任务[i] [j]的东西可以工作,但在实时API中则不行。当然,我可以使用.asArray()方法,但是当我想向该列表对象内的特定数组添加某些内容时,它对我来说没有用处。

编辑:好的,所以你可以让他们与例如:Tasks.get(i)[j]但是如何可以添加新的元素内部的特定数组? tasks.get(i).push('something')将无法​​正常工作。

回答

0

由于model.createList()返回一个CollaborativeList类,get方法应该做的伎俩(如你所指出的)。 push应该仍然能够工作,因为它会在列表末尾添加一个项目。您可以使用除推送以外的另一种方法,即insert,但您必须指定将在哪个索引处添加。

此外,请查看Data Modeling Guidelines,因为它包含了设计高效和正确的数据模型以使用实时API的方法。

+0

当然,我可以添加元素的任务数组,但不是特定的数组里面。当我执行tasks.get(i).push('something')时,我得到'object is not extensible'错误。 – Xnn04

1
var dumbList = tasks.get(i).slice(); 

会给你一个你放在那里的正常(非协作)数组的副本。您可以对其进行更改,然后将该值设置回协作阵列中,以将新版本放入文档中。

dumbList.push('new item'); 
tasks.set(i, dumbList); 

将触发ValuesChangedEvent上tasks

+0

重要的是要记住,'dumbList'不是一个协作列表,所以整个新值将被推送到服务器,多个用户的更改不会被合并,等等,我讨厌这样说,但OP的问题的最短答案是“重新整理你的数据模型,所以你不必'。 –