我用作前端sproutcore,后端是一个nhibernate驱动的openrasta REST解决方案。
在sproutcore中,引用是实际的ID / guid。因此,Sproutcore模型中的Address实体可以是:
// sproutcore code
App.Address = App.Base.extend(
street: SC.Record.attr(String, { defaultValue: "" }),
houseNumber: SC.Record.attr(String),
city: SC.Record.toOne('Funda.City')
);
带有测试数据:
Funda.Address.FIXTURES = [
答案 0 :(得分:0)
作为你写的笔记你做到了这个
myAddress.Get("city").MyCityName
什么时候应该
myAddress.get("city").get("MyCityName")
或
myAddress.getPath("city.MyCityName")
有了这个,我认为你的问题是“如何在我想要之前加载城市对象?”。
假设您使用的是数据源,则需要在请求城市对象时管理数据源。因此,在数据源的retrieveRecord
中,不要触发请求,并使用适当的参数调用dataSourceDidComplete
(查看datasource.js文件),以便城市记录不在{{1}中国家。您基本上是在告诉商店已加载记录,但是您传递了一个空哈希,因此该记录没有数据。
当然,问题是在某些时候你需要检索记录。您可以定义全局内容BUSY
,而App.WANTS_CITY
只能在您想要城市时进行检索。您需要管理该触发器的值; statecharts是一个很好的地方。
你问题的另一部分是“如何一次加载一堆记录,而不是每条记录都有一个请求?”
注意数据源有方法retrieveRecords
。您可以为此方法定义自己的实现,这将允许您获取所需的任何记录 - 避免N个子记录的N个请求 - 您可以在一个请求中完成所有这些。
最后,就个人而言,我倾向于使用类似
的方法编写API层 retrieveRecords
和
getAddress
并在我真正想要对象时适当地调用我的API。这种方法的一部分是我有一个非常轻量级的数据源 - 我基本上取决于我的API层处理的所有create / update / fetch方法。我使用getCity
和相关方法来更新商店。
我这样做是因为商店以非常严格的方式使用数据源。我喜欢更多的灵活性;并非所有服务器API都以相同的方式工作。