2

我创建了一个 ember 演示,一个父视图,它是子视图,这是父视图

<h1>A list of Todo Tasks</h1>
<ul>
{{#each model as |todo|}}
<li>{{#link-to "todos.details" todo}}{{todo.desc}}{{/link-to}}</li>
{{/each}}
</ul>

{{outlet}}

它的 js 登录是 import Ember from 'ember';

export default Ember.Route.extend({
    model (){
        return [{
            "id" : 1,
            "desc" : "Try use ember"
        },
        {
            "id" : 2,
            "desc" : "Add it to github"
        },
        ];

    }
});

但是当我使用链接并导航时,除非我刷新页面,否则数据不会显示这是子视图

<h2>The Details for <span style="color: green;">{{model.name}}</span> is : </h2>
{{#if model.error}}
<p>{{model.message}}</p>
{{else}}
<ul>
 {{#each model.steps as |task|}}
    <li>{{task.do}}</li>
    {{/each}}
</ul>
{{/if}}

{{outlet}} 

及其js逻辑

import Ember from 'ember';

export default Ember.Route.extend({
    model(params){

        if(params.id == "1"){
            return {
                name : "Ember SetUp",
                steps : [{
                    id :1,
                    do : "Download Ember Cli"
            },
            {
                    id :2,
                    do : "Generate New Project"
            },
            {
                    id :3,
                    do : "Generate Pages&Routes"
            }
                ]
            };
        }
        else{
            return {
                error : true,
                name : "Not Found",
                message : "There is no task with this id"
            }
        }
    }
});

我正在使用 ember 2.5,这是路由器的一部分

this.route('todos', function() {
    this.route('details',{path : "/:id"});
  });
4

2 回答 2

2
{{#link-to "todos.details" todo}}

由于您提供对象todo,因此它不会执行模型挂钩。所以试试

{{#link-to "todos.details" todo.id}}

参考这里:https ://guides.emberjs.com/v2.13.0/routing/specifying-a-routes-model/#toc_dynamic-models

注意:具有动态段的路由在通过 URL 输入时将始终调用其模型挂钩。如果路由是通过转换进入的(例如,当使用链接到 Handlebars 助手时),并且提供了模型上下文(链接到的第二个参数),则不会执行挂钩。如果提供了标识符(例如 id 或 slug),则将执行模型挂钩。

于 2017-06-05T04:45:02.170 回答
1

Ack,这里是视频的 OP。对于那个很抱歉。我的小错误,我应该在视频的评论中解决这个问题并尝试修改它。对困惑感到抱歉!丁:

于 2017-06-06T13:01:53.310 回答