我有一个很好的流程来加载/渲染一个集合,为该集合添加一个新模型,通过API将新模型同步回数据库,然后重新渲染我的集合......但是我遇到了一个我无法解决的问题:
是否有标准的“Backbone”方式在“创建/同步到后端 - >成功”事件中插入回调,还是应该覆盖创建功能?我可以使用“添加”方法(无论何时将新模型添加到dom上的集合/渲染时都会被ping通),但是当在页面加载时填充每个模型时它会触发...我真的只想要它当用户在页面已经呈现后创建/插入新模型时。
编辑:如果其他人有这个问题,下面与Elf来回导致我提出以下解决方案:
只需将coll.trigger("newModelCreated", nextModel);
的内容添加到Backbone.collection.create中的成功回调中 - 然后将事件绑定到与该集合关联的视图中的触发器(因此,在我的视图的初始化函数中)我有this.collection.bind('newModelCreated', this.createAndAdd, this);
。
然后,当触发器被触发时,我只是将它路由到我的“addOne”函数的特殊版本(我称之为createAndAdd
),它呈现了我的新模型+我想要的其他DOM内容与新创建的相关联。
不确定是否是最佳解决方案,但它对我有用。
答案 0 :(得分:2)
谁负责为正在创建的对象分配唯一键(ID)?服务器还是客户端?我的经验是服务器是ID的最终仲裁者,因为它负责在客户端关闭后存储它们。
我通常的做法是让模型保存自己,使用集合的URL作为目标。服务器应足够智能以将集合的POST标识为“新对象”,并且服务器返回带有ID的已保存对象,然后新模型将获取该ID。然后,您可以将模型添加到集合中,而不必对集合的add()
方法进行任何覆盖。 (显然,当您向集合中添加内容时,该集合的任何侦听器都将获得collection.add
事件,而该事件又会触发该集合的可见显示的呈现。)
答案 1 :(得分:0)
我在覆盖backbone.sync以从mongodb获取数据时遇到了类似的问题。我在脚本的另一部分调用了fetch,但需要等到获取完成后立即对数据执行某些操作。我只是设置了一个Backbone事件聚合器,并在检索到记录后触发了fetchComplete事件。然后在我的脚本的另一部分中,我使用获取的数据(以及解除绑定)将任务绑定到fetchComplete事件。