Ember - 当两个都有阵列控制器时,如何从父路由链接到子路由?

时间:2013-10-04 14:47:32

标签: ember.js

我有以下设置。 每个帐户都可以有多个配置文件

app.js:

App.Router.map(function () {
    this.resource("accounts", function () {
        this.resource("profiles", {path: "/:account_id"})
    })
});

App.Account = Ember.Object.extend({
    findAll: function () {
        // Ajax request to fetch data from the server
    }
});

App.AccountsRoute = Ember.Route.extend({
    model: function () {
        return App.Account.findAll();
    }
});

App.Profile = Ember.Object.extend({
    findAll: function () {
        // Ajax request to fetch data from the server
    }
});

App.ProfilesRoute = Ember.Route.extend({
    model: function () {
        return App.Profile.findAll();
    }
});

accounts.hbs:

{{#each model}}
    {{#linkTo "profiles" tagName="li"}}
        {{accountName}}
    {{/linkTo}}
{{/each}}
{{outlet}}

profiles.hbs:

{{#each model}}
    {{profileName}}
{{/each}}

但是,这不起作用。每当我点击其中一个帐户名称时,插座中都没有显示任何内容。如果我在{{#linkTo“profiles”这个tagName =“li”}}中传递“this”,那么我会收到一条错误消息,指出Ember无法循环通过不是数组的东西。当它们都有阵列控制器并且子模板显示在父级插座中时,您将如何从父路由链接到子路由?

2 个答案:

答案 0 :(得分:1)

App.Router.map(function () {
    this.resource("accounts", function () {
        this.resource("account", {path: "/:account_id"})
            this.resource("profiles", function () {
                this.resource("profile", {path: "/:profile_id"})
            }
        }
    })
});

App.Account = Ember.Object.extend({
    findAll: function () {
        // Ajax request to fetch data from the server
    }
});

App.AccountsRoute = Ember.Route.extend({
    model: function () {
        return App.Account.findAll();
    }
});

App.Profile = Ember.Object.extend({
    findAll: function () {
        // Ajax request to fetch data from the server
    }
});

accounts.hbs:

{{#each content}}
    {{#linkTo "account" this tagName="li"}}
        {{accountName}}
    {{/linkTo}}
{{/each}}
{{outlet}}

account.hbs:

{{#each profiles}}
    {{profileName}}
{{/each}}

答案 1 :(得分:0)

如果检索到的帐户对象已经在其中嵌入了配置文件列表,则

chopper的答案有效。然而,在我的设置中并非如此(也许我没有说清楚)。我解决这个问题的方法是在帐户路由中设置一个动作哈希,使用“fetch_profiles”动作处理程序,从帐户路由触发并将点击的帐户作为动作参数传递。该操作使用AJAX调用检索配置文件列表,然后将应用程序重定向到配置文件路由。所以在这种情况下我没有使用链接帮助器。