3

我正在通过 Ember.js 开发一个应用程序,该应用程序维护类别,在类别的列表视图中,当用户单击创建按钮时,我们将动态显示新的类别表单。在使用 Ember 的 Router 之前,我们使用如下机制:

看法:

LCF.CategoriesView = Ember.View.extend({
    templateName:'admin/app/templates/categories/list',
    isNewVisible:false,

    showNew:function () {
        this.set('isNewVisible', true);
    },

    hideNew:function () {
        this.set('isNewVisible', false);
    }
});

模板:

<div class="well well-small">
   <a class="btn  btn-primary" href="#" {{action "showNewCategory"}}>Create</a>
</div>
{{#if view.isNewVisible}}
  {{view LCF.NewCategoryView}}
{{/if}}

使用路由器后,事件将由路由处理,我将代码更改如下:

路由器:

    categories:Em.Route.extend({
        route:'/categories',

        connectOutlets:function (router, context) {
            router.get('applicationController').connectOutlet('categories', router.get('store').findAll(LCF.Category));
        },

        showNewCategory:function (router) {
            router.transitionTo('categories.newCategory', {});
        },

        index:Ember.Route.extend({
            route:'/'
        }),

        newCategory:Em.Route.extend({
            route:'/new',

            cancelEdit:function (router) {
                router.transitionTo('categories.index');
            },

            connectOutlets:function (router, context) {
                router.get('categoriesController').connectOutlet('editCategory', {});
                router.get('editCategoryController').enterEditing();
            }
        })

模板:

<div class="well well-small">
    <a class="btn  btn-primary" href="#" {{action "showNewCategory"}}>Create</a>
</div>
{{outlet}}

有用。

我的问题是:

  • 这是处理动态视图的正确方法吗?我们是否需要为页面中的每个浮动层创建一个状态/控制器?
  • 即使应用程序仍显示类别,URL 也会更改。
  • 模板中只有一个{{outlet}},如果要显示多个动态视图,怎么办?
4

1 回答 1

2
  • 对我来说,这看起来很不错。对于状态创建和控制器......这里没有是/否的答案。通常我会说你为每个上下文逻辑创建一个控制器,当你想处理一个新的应用程序状态时你创建一个路由。在您的示例中,您做得很好,类别(状态以概述所有类别),显示(显示特定类别)...

  • 这里有什么问题?对不起:s,我不明白你想在这里知道什么。

  • 这里的答案很简单,如果页面中有多个动态视图要显示,则可以使用多个 {{outlets}},使用命名的 outlet。请参阅:Ember.js 路由器应用架构——如何拥有多个嵌套的视图/控制器对

于 2012-10-25T07:00:30.557 回答