Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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 强制路由到Instantinate新控制器/视图对,而不是更改模型_Javascript_Ember.js_Router_Ember Router - Fatal编程技术网

Javascript 强制路由到Instantinate新控制器/视图对,而不是更改模型

Javascript 强制路由到Instantinate新控制器/视图对,而不是更改模型,javascript,ember.js,router,ember-router,Javascript,Ember.js,Router,Ember Router,我想同时多次显示某个控制器/视图对。问题是路由会更改当前控制器上的模型,而不是创建新的模型 是否可以强制路由实例化新控制器?我尝试过在Ember.Route中处理回调和钩子,但我找不到任何方法使其表现为这样。如果您想同时显示多个模型,似乎将路由点设置为一个模型,该模型的更改无法很好地映射到您尝试执行的操作。除非使用嵌套布线,否则路由器的设计目的不是向显示器添加其他视图。您可以尝试覆盖路由中的,并使用来指定使用哪个控制器,但这无助于同时显示多个控制器/视图对 相反,我会尝试使用其中一种方法来指定自

我想同时多次显示某个控制器/视图对。问题是路由会更改当前控制器上的模型,而不是创建新的模型


是否可以强制路由实例化新控制器?我尝试过在Ember.Route中处理回调和钩子,但我找不到任何方法使其表现为这样。

如果您想同时显示多个模型,似乎将路由点设置为一个模型,该模型的更改无法很好地映射到您尝试执行的操作。除非使用嵌套布线,否则路由器的设计目的不是向显示器添加其他视图。您可以尝试覆盖路由中的,并使用来指定使用哪个控制器,但这无助于同时显示多个控制器/视图对

相反,我会尝试使用其中一种方法来指定自定义控制器。当您要显示一组内容时,最简单的方法是使用模板中的

{{#each product in products itemController='myControllerName'}}
如果要指定自定义视图类,也可以这样做

{{#each product in products itemController='myControllerName' itemViewClass='App.MyView'}}

根据您尝试执行的操作,获取每次都获取新实例的上下文的另一种方法是创建组件。不过,这更重,您可能需要重构一些代码,将控制器逻辑移到组件中。

您的模板看起来怎么样?您是否也意识到
{{each}}
助手或
阵列控制器的
itemController
选项的存在?我只是先尝试一个原型,这样我仍然可以按照我想要的方式塑造模板。我从小提琴开始,但在这个问题上遇到了麻烦。谢谢。我怀疑路由器不是为这个设计的。使用每一个或多个组件可能是最好的选择。不过,我希望URL指向上次查看的模型。基本上,我正在尝试创建一个界面,其中一个新的路由视图部分地“滑动”到上一个视图中。就像Spotify web player中的一样:将动画设置为。我想我需要手动更新URL,但是路由器可以吗?我不使用spotify,所以我不能确定,但是从您的屏幕截图来看,您可以使用上面的
#每个
+
itemController
参数来获得第一个屏幕截图,以显示所有艺术家。但是,然后添加一个嵌套路线,其中包含一个动态段,该段具有您为获取第二个屏幕截图而放大的艺术家的ID。单击列表中的艺术家时,转换到此新路线。您可以在所选模型上使用观察者进行UI转换,如果有意义,可以使用带有嵌套模板的
{{outlet}}
。这适用于概览页面+艺术家详细信息页面。但从“艺术家”页面,你可以点击其他“艺术家”页面。然后这些将被层叠在一起。URL只是/:artist_id,没有任何嵌套。问题是,当我想转换到另一个艺术家时,它不会创建我可以在其上分层的新控制器,而只是在最顶层的艺术家控制器上更改艺术家。也许我应该放弃路由器,但是用户仍然可以使用/:artist_id URL访问页面,只有这样它才不会显示任何分层。这就是为什么我建议在概览页面的视图中使用观察者来进行转换。可能未使用嵌套管线的模板。在概述页面中,收集所有艺术家的作品。然后单独收集放大的艺术家。当放大的艺术家更改时,您的视图可以观察到这一点,显示新艺术家的详细视图并过渡到它。所有这些逻辑都可以在您的概览控制器/视图中。嵌套的路由纯粹是为了保存上次放大的艺术家的状态,如果用户转到该URL,可以稍后加载。啊,我明白你的意思了。艺术家路线基本上可以管理艺术家组件的堆栈。我想那会有用的。然而,它仍然感觉像一个黑客解决方案。例如,它不会涵盖这样的情况:a->B->B->a->C。如果有一种方法可以在Ember中使用Cocoa UINavigationController之类的东西,那就太好了。