我有"项目清单"在我的申请中。每个项目都有名称,描述和成员列表(姓名+姓氏)。
看起来我必须获取项目列表(名称,描述等)以及每个项目获取成员列表。这意味着我有一些级别的视图,每个级别获取集合并创建另一个视图/子视图的实例。
所有集合都在视图初始化方法中获取,并从REST服务异步加载。
这意味着我无法确定ListOfProjectView何时准备就绪(因为子视图)并且我遇到了另一个问题......
问题 - 如何正确使用观点?
1)如果我在视图中获取数据或者我应该传递完整的数据来查看是否正常?
2)在另一个视图中创建视图实例是否正确?
答案 0 :(得分:0)
如果你正在使用木偶(你应该是),那么你所描述的是:
ListOfProjects是一个CompositeView(或CollectionView),其中itemView(childView)是一个Project,它本身就是一个CompositeView,其中itemView是一个成员。
当数据可用时,Marionette将呈现视图,因此假设您有一个简单的REST api,它将执行以下请求:
/projects /projects/1/members /projects/2/members ... /projects/N/members
项目列表将在第一个请求完成后呈现,每个项目的成员将在获取集合后立即呈现。
如果要优化网络请求的数量(如果项目数量很大),那么您可能希望在每个项目的JSON中包含成员,并覆盖parse method以便采取成员出来并转换为相应的集合。
答案 1 :(得分:0)
在if any(i in string for i in list): # Python
if any of the i's is in the string, for each i in the list: # pseudo-English
上获取模型会强制您获取initialize
,否则您将在渲染视图时运行竞争条件,其中集合将为空。
我通常会在实例化视图之前实例化我的集合并获取其模型。我通过利用Promises来处理事件的实际顺序。默认情况下,Backbone sync将实现async
。当你进行提取时,fetch将返回一个jQuery Promise。所以,我的视图创建周期看起来像这样:
$.ajax()
关于第二个问题,如果子视图是视图层次结构的一部分,那么在视图中处理视图没有任何问题。这不是唯一的方法。但这很有意义,总的来说,我没有遇到任何问题。