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