Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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 管理Backbone.js页面转换_Javascript_Backbone.js - Fatal编程技术网

Javascript 管理Backbone.js页面转换

Javascript 管理Backbone.js页面转换,javascript,backbone.js,Javascript,Backbone.js,我知道这是一个非常常见的话题,但我找不到任何能准确回答我问题的答案:) 我现在正在做一个Backbone.js项目。在路由器方面,我不在路由器中实例化视图、模型或集合,而是将路由器用作处理状态的一种方式——路由器调用自定义控制器对象上的方法 然后,我的控制器为索引、显示等实例化不同的视图、模型和集合。这一切都很好 我只是有点挣扎如何处理页面转换。我已经阅读了所有关于管理僵尸等的优秀文章,并且知道无论发生什么,我都必须有一些旧视图的清理系统(我目前正在使用Derick Bailey在博客中提到的.

我知道这是一个非常常见的话题,但我找不到任何能准确回答我问题的答案:)

我现在正在做一个Backbone.js项目。在路由器方面,我不在路由器中实例化视图、模型或集合,而是将路由器用作处理状态的一种方式——路由器调用自定义控制器对象上的方法

然后,我的控制器为索引、显示等实例化不同的视图、模型和集合。这一切都很好

我只是有点挣扎如何处理页面转换。我已经阅读了所有关于管理僵尸等的优秀文章,并且知道无论发生什么,我都必须有一些旧视图的清理系统(我目前正在使用Derick Bailey在博客中提到的.close()方法)

如果我要从#显示到#索引,或任何其他路径更改,我理解只实例化新的、新的视图、模型等是有意义的,这几乎是我在每个教程中看到的。当然,一定要清理旧的

但是,如果我已经在#show#页面上,并且我转到另一个#show页面,那么我想要的所有视图等都已经实例化并呈现了。我只想更改模型和集合的数据

所以我想我的问题是为什么我看不到人们经常重复使用视图。在我的脑海中,我在想,如果你已经在你想要的页面上了,那么更新该视图链接到的模型/集合的url或urlRoot并重新获取就更有意义了。这将触发一个重置事件,所有需要重置的视图都可以订阅该事件并重新呈现它们自己

但是,正如我所说,我没有看到有人这样做。只是因为这真的是个坏主意吗?如果有人在做类似的事情,您如何处理“可刷新”模型和集合的跟踪


谢谢

我认为这在很大程度上取决于您使用视图的方式以及视图的复杂程度

如果您的视图非常简单,那么重新呈现整个视图并用新标记替换现有HTML通常会更容易(它也可能比遍历DOM来更改必要的部分更快。但是,如果您有一个更复杂的视图,并且只有少量的信息在更改,那么最好是侦听Approvate属性更改事件(例如,然后只更新DOM的该部分)


请记住,虽然惯例是使用渲染元素的
render
方法,但您也可以轻松地将额外的刷新事件仅应用于
refresh
某些部分,然后您可以只交换模型(如@jackwalders)并调用
refresh
方法。

渲染视图时,是否向其传递模型?如果是,只需重新调用视图的渲染函数,但向其传递另一个模型。视图不会被破坏,其中的标记只是使用新传入模型的数据重新创建。我当前正在处理的模型具有顶级视图(我猜是页面视图),它被传递一个集合和一个模型(它们被实例化,并根据控制器中路由器传递的参数设置它们的url),此顶级视图以其骨架形式和两个子视图进行渲染-子视图根据其显示内容传递到集合或模型,并在其中进行渲染(使用模型或集合数据)还有。我想我正在挣扎的是“顶级”管理。假设我们现在路由到另一个页面,我可以破坏这个页面并创建一个新页面。但是如果说路由“更改”,但实际上它是同一个页面,但参数不同,只需更改资源(模型、集合)的url/urlRoot是否可以然后重新获取,从而触发事件,并重新渲染?我知道Backbone.js没有“正确的方法”,但我还没有看到我所描述的内容。好的,谢谢Jack。我想这只是一个尝试和错误的案例,然后,我会看看这两种方法的表现。