EmberJs:1个型号,多个视图控制器

时间:2013-01-01 21:23:07

标签: ember.js

我对Ember很陌生,而且我很遗憾为我的应用找到了更好的方法:

应用: 屏幕水平分割成两部分:

  • 左侧部分是填写Person属性(name,lastName,email)
  • 的表单
  • 右侧部分是左侧表格的图形视图

我不确切知道最佳解决方案:

解决方法1:

  • 模型的Person对象(实例现在是person对象全局变量)
  • 用于管理表单并进行属性验证的PersonFormController
  • PersonFormView显示表单
  • PersonRenderedController:管理表单的呈现
  • PersonRenderedView(仅显示视图,无用户交互)
  • 2个控制器对其内容属性的人全局变量的引用
  • 使用"连接插座"连接控制器/视图 router.get(' applicationController')。connectOutlet(' left',' personForm'); router.get(' applicationController')。connectOutlet(' right',' personRendered');

我不确定这个解决方案,因为PersonRenderedController不是很有用,并且用于"插座连接"。

解决方案2:

  • 模型的Person对象(实例现在是person对象全局变量)
  • 用于管理表单并进行属性验证的PersonFormController
  • PersonFormView显示表单
  • PersonRenderedView(仅显示视图,无用户交互)
  • 没有personRenderedController(不需要因为此视图只显示模式)
  • 没有出口但在普通模板中手动创建2个视图(表单和渲染)

我认为解决方案1可能更灵活(如果渲染视图需要控制器)

你能告诉我吗?

1 个答案:

答案 0 :(得分:1)

解决方案1对我来说似乎更好。与插座一起出去总是一个好主意。在这种情况下,您不必创建PersonRenderedController。您可以使用connectOutketin以满足您的需求。以下段落来自源代码,并展示了如何将此方法与选项哈希一起使用:

  

* /     connectOutlet:function(name,context){       //规范化参数。支持的参数:       //       // 名称       //名称,上下文       // outletName,name       // outletName,name,context       //选项       //       // options hash具有以下键:       //       // name:控制器和视图的名称       //使用如果这是通过的,名称       //确定视图和控制器。       // outletName:插座的名称       //填写。默认:'view'       // viewClass:要实例化的视图的类       // controller:要传递的控制器实例       //到视图       // context:一个应该成为的对象       //控制器的content,因此       //模板的上下文。

通过这种方式,你可以为你的另一个视图重用你的1个控制器:

router.get('applicationController').connectOutlet({
   outletname: "right",
   viewClass : App.PersonRenderedView,
   controller: router.get("personFormController")
 })

所以我建议使用更明确的connectOutlet版本,与基于名称匹配的默认方法相比,它可以提供更多控制。