【问题标题】:How to create routes to full page New / Edit template in EmberJS如何在 EmberJS 中创建到整页新建/编辑模板的路由
【发布时间】:2013-06-06 08:51:09
【问题描述】:

我有一个列表控制器,每个元素都有编辑链接。如何将编辑模板呈现为整页?

一个常见的用例是表单页面很大,将其呈现在列表下方是没有意义的(也可能很长)。

在父级插座中渲染 Edit 模板会破坏层次结构,并且后退/取消按钮不会重新渲染列表。所以看起来它需要是列表的子项(并在列表模板的出口中呈现),但它必须隐藏列表模板而不隐藏自身。

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    我在构建玩具应用程序时多次遇到过这个“问题”。我的解决方案是为资源添加模板。例如,如果您正在构建通讯录,您当前的问题/解决方案如下所示:

    App.Router.map(function() {
      this.resource('person', { path: '/person' }, function() {
        this.route('index', { path: '/' });
        this.route('edit', { path: '/:person_id/edit' });
      });
    });
    

    您的模板可能如下所示:

    <script type="text/x-handlebars" data-template-name="person/index">
        <ul>
            {{#each model}}
                <li>{{name}} - {{#linkTo person.edit this}}Edit{{/linkTo}}</li>
            {{/each}}
        </ul>
    
        {{outlet}}
    </script>
    
    <script type="text/x-handlebars" data-template-name="person/edit">
        {{#each model}}
            {{view Ember.TextField valueBinding="name"}}
        {{/each}}
    </script>
    

    要停止在索引路由的路由器中呈现编辑模板,您可以添加模板:

    <script type="text/x-handlebars" data-template-name="person">
        {{outlet}}
    </script>
    

    并从 person.index 模板中删除 {{outlet}}。

    这样,您的 index 和 edit 模板都是 person 资源的子模板,应该加载到 person 模板的 {{outlet}} 而不是 person.index {{outlet}} 中。

    希望这是有道理的。

    【讨论】:

    • 我不确定这有什么帮助。模型是相同的,因此即使模板呈现为子模板,它们仍然共享相同的数据。更新编辑表单中的模型会更新与列表的绑定。此外,我有整页表单(兄弟姐妹)和模式表单(列表必须出现在背景中 - > 需要子插座)。我需要一种方法来强制 Ember Data 在单击其他链接或粘贴不同的链接时回滚模型更改(不会触发回滚操作,就像取消按钮一样)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    相关资源
    最近更新 更多