我正在学习Marionette /主干与出色的书"Backbone.Marionette.js:绅士游戏介绍“。在“处理数据延迟”一章中,作者(David )使用JQuery延迟对象/承诺将数据从fetch()操作(在实体/contact.js中调用)传递给控制器(示例中为show_controller.js和list_controller.js )。
我理解它是如何工作的,但在我之前关于主干的阅读中,这类事情是由主干事件处理的:我们在模型上侦听一个'change‘事件,当它被触发时,我们调用render()。所以我有几个问题要问:
当我们从服务器得到响应时,延迟的视图是否比主干事件更适合更新视图?
[2]这两种解决方案的优缺点是什么?
3/在这种情况下使用骨干事件是否错误/错误?
谢谢你的帮忙!
发布于 2014-04-24 16:42:20
只有当从服务器获取了模型/集合时,才需要加载/实例化视图。在这种情况下,您可以使用延迟对象,因为这将告诉您数据何时加载。
当然,您可以侦听模型/集合上的更改事件,但您需要实例化视图或向模型/集合添加额外的侦听器才能创建视图。
所以,回答你的问题:
1.实际上取决于,如果您不介意更新您的视图,那么事件就没问题了。如果您想稍后实例化一个视图,延迟是一个很好的选择。
2.见导言
3.不太好。它还取决于应用程序的规模。正如S_I_R所提到的,它可能会产生一些更清晰的代码。
发布于 2014-04-24 16:24:56
好吧,让我解释一下,
1.延迟对象有承诺,因此它包含在其中构建的回调。因此,在数据驱动的web应用程序中,最好使用它来消除异步函数的回调地狱。
2. --如果您需要绑定一个用户控件事件,那么需要触发器或来自Backbone.Events的事件来做到这一点,在这种情况下,您必须通过控制器手动传播您的事件。另一方面,延迟对象可以在完成时给出状态,因此之后可以填充视图或执行其他任务。
3.引入了良好延迟机制,以缓解手动回调非常严重的情况。它更容易使用承诺,而不是回调,这使代码更简洁。而且,由于javascript是单线程的,所以对于异步操作来说,承诺更有效。
发布于 2014-08-07 10:46:28
1)当我们从服务器获得响应时,延迟对象是否比主干事件更好地更新视图?
延迟对象更好。
我会解释原因。依赖于视图在其模型或集合上的更改或同步事件后重新呈现可能导致视觉异常。当您从服务器获取集合并将其模型显示为列表时,让我们举一个例子。当集合中有零个模型时,您需要显示“没有找到模型”。在本例中,在获取集合并触发“更改”事件之前,用户将在屏幕上看到“没有找到模型”。一旦获取集合,视图将重新呈现自身,现在用户将看到模型。这会导致混乱。虽然这只是众多用例中的一个,但我相信您明白我的意思。
一旦从服务器获取了对象,就可以将视图的render()方法绑定到对象的“change”或“sync”事件中,以了解对象可能发生的任何后续更改。
2)这两种解决方案的优缺点是什么?
我认为问题1的答案也回答了这个问题。
3)在这种情况下使用骨干事件是否错误/糟糕?
可能吧。我会和S_I_R的回答一起讨论这个问题。
https://stackoverflow.com/questions/23273927
复制相似问题