Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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
Javascript 如何将SC.Record.toMany()数据绑定到ListView?_Javascript_Web_Sproutcore - Fatal编程技术网

Javascript 如何将SC.Record.toMany()数据绑定到ListView?

Javascript 如何将SC.Record.toMany()数据绑定到ListView?,javascript,web,sproutcore,Javascript,Web,Sproutcore,我正在尝试使用Sproutcore呈现UI,其中我有一个列表列表。有一个垂直的数据列表,其中每个关联项都有自己的项列表。根据我对Sproutcore的了解,我已经建立了我认为合适的模型 型号: App.VerticalData = SC.Record.extend({ someField: SC.Record.attr(Boolean), associatedListOfData: SC.Record.toMany("App.HorizontalData", { inverse:

我正在尝试使用Sproutcore呈现UI,其中我有一个列表列表。有一个垂直的数据列表,其中每个关联项都有自己的项列表。根据我对Sproutcore的了解,我已经建立了我认为合适的模型

型号:

App.VerticalData = SC.Record.extend({
  someField: SC.Record.attr(Boolean),
  associatedListOfData: SC.Record.toMany("App.HorizontalData", {
    inverse: "vertical",
    isMaster: YES
  })
});

App.HorizontalData = SC.Record.extend({
  someForeignKeyField: SC.Record.attr(Number),
  vertical: SC.Record.toOne("App.VerticalData", {
    inverse: "associatedListOfData",
    isMaster: NO
  }),
});
我已经在垂直列表的ListItemView中添加了一个子视图,并修改了子类,这样它就可以在水平列表中布局项目……好吧……水平。我遇到的问题是,我似乎能够从toMany()关系中获取数据以绑定到此水平列表的唯一方法是对垂直列表中的每个项执行以下操作

horizontalListView.set('content', App.store.find(SC.Query.local(App.HorizontalData, {
  conditions: 'someForeignKeyField = ' + keyValueOfVerticalItem)
})));
这是痛苦的,令人悲哀的缓慢。我不明白为什么我不能只使用当前垂直列表项的toMany()字段的computed属性的结果。有人能在这里提供一些指导吗?也许我错过了一些愚蠢的事情

如果我试图直接访问该属性,我得到的结果是:

Object
SproutCore18001994610927067697: "sc1271"
__sc_super__: Object
_bindings: Array[0]
_kvo_cacheable: true
_kvo_changeLevel: 0
_kvo_changes: null
_kvo_cloned: Object
_kvo_content_observed_keys: Object
_kvo_dependents: Object
_kvo_revision: 2
_object_toString: "SC.ManyArray:sc1271"
_observableInited: true
_observers: Array[0]
_prevStoreIds: Array[167]
_properties: Array[15]
_records: null
bindings: Array[0]
manyAttribute: Object
outlets: Array[0]
propertyName: "associatedListOfData"
propertyRevision: 2
record: Object
recordType: App.HorizontalData
__proto__: Object

我不知道这看起来是否正确。因此,在我用于测试数据的装置中,可能仍然没有正确定义某些内容。我在AssociatedListofData字段中输入的信息是一个与HorizontalData表中元素的GUID对齐的数字数组。

我认为您的记录定义可能有问题。如果您暂时忘记了列表视图,只需打开控制台,您是否可以抓取一个
App.VerticalData
记录并询问它是什么
associatedListOfData

例如:

var vertical_id = 1;
var vertical = App.store.find('App.VerticalData', vertical_id);

console.log(vertical.get('associatedListOfData'));
如果打印不正确,那么您知道记录本身有问题,而不是视图有问题

我不得不在这里猜测一下,但是由于在创建记录时没有指定密钥,我打赌SC根本无法将两者联系在一起。除非您的数据库键是
关联的数据列表
垂直
,否则它可能无法工作


如果这还不能解决问题,您能否更新您的代码以显示它的实际编写方式,并可能向我们显示您的服务器发送的JSON?

经过一些测试和实验后,我认为问题可能与App.store.datahash不包含相关记录的值有关。显然,这必须手动填充关联以协调记录,并且不会在关联中构造SC.ManyArray时自动填充存储。我不知道这是否是Sproutcore中的一个bug,或者它是否是预期行为


我可以通过使用App.HorizontalData表上的查询填充this属性来解决这个问题,该表返回了我为我的设备生成的所有记录。如果存储区有可用的散列数据,则使用返回的SC.ManyArray作为ListView的内容按预期工作。

我正在使用Fixture。因此,此时没有来自服务器的JSON。我也不能真正分享真实的数据。但我可以尽我最大的努力确保模拟数据的结构。我将捕获我得到的并在这里尽我所能地共享它。在我看来,问题是我从SC.ManyArray获得的数据在绑定到ListView的内容时似乎不起作用。我之前已经查看了记录设置,并纠正了我以前遇到的一些问题。但据我所知,我现在是顺从的。也许你可以指出什么是“对的”。如果一切正常,我不知道会发生什么。