Ember.js 当试图显示按父id筛选的子对象列表时,我会得到一个空页面。使用linkTo。仅在刷新浏览器时有效

Ember.js 当试图显示按父id筛选的子对象列表时,我会得到一个空页面。使用linkTo。仅在刷新浏览器时有效,ember.js,Ember.js,我开始了解余烬JS。我试图有一个帐户列表,在每个帐户旁边,我想要一个链接来导航到该帐户的交易列表。 当我加载请求/帐户的第一页时,我成功地获得了我的帐户列表。但当我点击 {{#linkTo transactions this}}see transactions{{/linkTo}} 浏览器URl转到/#/transactions/1,但我得到一个空页面。如果我直接在浏览器中加载此URL,则一切正常。但从帐户列表中点击一个帐户,我什么也得不到 账户模板如下所示: <ul id="cont

我开始了解余烬JS。我试图有一个帐户列表,在每个帐户旁边,我想要一个链接来导航到该帐户的交易列表。 当我加载请求/帐户的第一页时,我成功地获得了我的帐户列表。但当我点击

{{#linkTo transactions this}}see transactions{{/linkTo}} 
浏览器URl转到/#/transactions/1,但我得到一个空页面。如果我直接在浏览器中加载此URL,则一切正常。但从帐户列表中点击一个帐户,我什么也得不到

账户模板如下所示:

<ul id="conta-list">
    {{#each controller}}
        <li>
            Account: {{name}} {{#linkTo transactions this}}see transactions{{/linkTo}}
        </li>
    {{/each}}
</ul>
我在控制台中得到“Object[Object]没有方法'addArrayObserver'”

仅当我重新加载浏览器时,route/transactions/:account_id才会命中服务器

我在控制台中得到“Object[Object]没有方法'addArrayObserver'”

这是因为linkTo帮助程序正在向事务路由传递一个帐户,但您的模板希望事务模型是一个事务数组

如果我直接在浏览器中加载此URL,则一切正常。但从帐户列表中点击一个帐户,我什么也得不到

因此,当您通过url访问时,路由的模型挂钩被称为,
App.Transaction.find
向服务器发出请求,一切正常。按照设计,在跟踪链接时不会发生任何情况,而是将上下文参数传递给linkTo帮助器,这些参数用于设置路由的模型。所以在这种情况下,ember路由器不调用路由的模型钩子

实现这一点的ember方法是将事务建模为嵌套资源。所以你的路线是这样的:

App.Router.map(function () {
  this.route('accounts');
  this.resource('account', { path: '/account/:account_id' }, function() {
    this.route('transactions');
  });
});
使用这种方法,您可以使用自动生成的帐户路由,但需要定义AccountTransactions路由

App.AccountTransactionsRoute = Ember.Route.extend({
  model: function (params) {
    return this.modelFor("account").get('transactions');
  }
});

谢谢你,迈克。两个模型之间的关系仅为onde方向。这是一个多对一的过程。所以账户不知道它的交易。所以我想我只需要在App.accountTransactionRoute中更改模型钩子的返回,对吗?TKST试过了,效果很好。谢谢但在转换到account之前,我在控制台中获取了此日志。事务警告:直接父路由(“应用程序”)未呈现到主出口,并且可能不需要默认的“进入”选项(“帐户”)。知道它是什么吗?很高兴它起作用了。警告并不是什么大问题,它让您知道,ember希望将“transactions”模板呈现到“account.hbs”中,但由于找不到该模板,它将呈现到“application”中
App.Router.map(function () {
  this.route('accounts');
  this.resource('account', { path: '/account/:account_id' }, function() {
    this.route('transactions');
  });
});
App.AccountTransactionsRoute = Ember.Route.extend({
  model: function (params) {
    return this.modelFor("account").get('transactions');
  }
});