EmberJS - 为不同的路由共享控制器/模板 [英] EmberJS - sharing a controller / template for different routes

查看:13
本文介绍了EmberJS - 为不同的路由共享控制器/模板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个非常简单的 CRUD 应用程序,它允许创建和编辑新对象.

用于添加记录和编辑记录的模板几乎相同.

它们使用完全相同的表单元素.唯一的区别是表单下方的标题和按钮(应该更新或创建记录)

在我的实现中,我有

  • 2 个路由定义
  • 2 个路由对象
  • 2 个控制器对象
  • 2 个模板

我想知道是否

  • 我不能在这里提倡重复使用
  • 如果需要所有这些对象.

困扰我的是什么:

  • 我有 2 个单独的模板用于创建和编辑(虽然它们几乎相同)
  • 我有 2 个独立的控制器,它们的作用完全相同.

我希望在控制器级别解决这个问题.当控制器装饰模型时,在我的情况下,单个控制器对象可以包装新记录或现有记录.然后它可以公开一个属性 (isNewObject),以便模板可以决定我们是处于新建"还是编辑"流程中.控制器可以有一个在 newupdate 场景中都有效的 createOrUpdate 方法.

路线

当前的实现是为我的资源使用一个新的和一个编辑路由.

this.resource("locations", function(){this.route("new", {path:"/new"});this.route("edit", {path: "/:location_id" });});

新路线

new route 负责创建新记录,并在用户导航到新记录屏幕时调用.

App.LocationsNewRoute = Ember.Route.extend({模型:函数(){返回 App.Location.createRecord();}});

编辑路线

edit route 负责在用户单击概览屏幕中的编辑按钮时编辑现有对象.我没有扩展默认的编辑路线,而是使用自动生成的路线.

控制器

newedit 控制器负责处理模板中发生的操作(保存或更新记录)

两个控制器唯一要做的就是提交事务.

注意:我想这是一个可以重复使用的候选者,但是我如何使用单个控制器来驱动 2 个不同的路线/模板?

App.LocationsNewController = Ember.ObjectController.extend({添加项目:功能(位置){location.transaction.commit();this.get("target").transitionTo("locations");}});App.LocationsEditController = Ember.ObjectController.extend({更新项目:功能(位置){location.transaction.commit();this.get("target").transitionTo("locations");}});

模板:

如您所见,我在这里唯一的代码重用是部分(模型字段绑定).我还有 2 个控制器(新建和编辑)和 2 个模板.

新模板设置正确的标题/按钮并重新使用表单部分.

部分

注意:我希望我可以在这里做一些更高效/更智能的事情.

我希望我的模板看起来像这样:(从控制器获取标题,并有一个处理更新和创建的单一操作)





        
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆