3

所以我需要能够在 ember 中支持(无限)无限数量的视图。

基本上,我正在创建一个调查应用程序。调查可以具有未定义数量的步骤,因此未定义数量的视图/控制器。步骤数是从服务器获取的,以及内容和车把模板(一个步骤只有有限数量的可能内容类型),我需要某种方式来扩展不同调查的调查. 所以基本上一个 ember 应用程序可以处理整个事情,我已经设法抽象出我的代码来渲染内容类型,这对于 ember 步骤无关紧要:我现在只需要让它支持无限数量的步骤

是否可以有 ember 视图和控制器,但不是按名称引用它们,而是按数组索引引用它们?就像通常你会去 App.TestView = ... 和 router.get('applicationController').connectOutlet('test'),但我可以使用 App.AllView[0] = Ember.View.extend(); 和 router.get('applicationController').connectOutlet('test')[0] 什么的?然后我可以在开始时有一个 for 循环,它抓取包含内容类型和步数的调查数据,将其插入视图数组,然后我们就走了

可能还有其他方法可以实现这一点,因此任何解决方案都会很棒。创建新的 ember 应用程序不是一种选择,同一个应用程序需要为作为调查对象传入的任何内容提供服务。

4

1 回答 1

5

您可以创建一个包含不同步骤的视图类数组。您可以使用车把模板名称向阵列添加新视图。

App.surveyViews = [];
App.surveyControllers = [];
App.surveyViews['firstStep'] = Em.View.extend({ templateName: 'my-handlebars-template' });
App.surveyControllers['firstStep'] = Em.Controller.extend();

您的路由可以从路由中获取步骤,并使用它来查找适当的视图类和控制器以用于 connectOutlet。

step: Em.Route.extend({
    route: '/:step',
    connectOutlets: function(router, context) {
        router.get('applicationController').connectOutlet({ 
            viewClass: App.surveyViews[context.step], 
            controller: App.surveyControllers[context.step].create(),
            context: {}
        });
    }
})

您可以为上下文等添加所需的任何额外逻辑,但这将是基本思想。

于 2012-12-06T13:00:30.340 回答