1

我有一个运行良好的现有 Ember 应用程序。我需要向应用程序添加一个新的子路由,以允许用户查看其他信息。我当前的路线如下所示:

Social.Router.map(function() {
    this.resource('accounts',  { path: '/accounts' }, function(){
        this.resource('account', { path: ':account_id'});
    });
});

使用以下网址

#/accounts/56/

我想添加的路线是这样的:

#/accounts/56/interactions

所以我添加了一个嵌套路由,如下所示:

Social.Router.map(function() {
    this.resource('accounts',  { path: '/accounts' }, function(){
        this.resource('account', { path: ':account_id'}, function(){
            this.route('interactions', { path: '/interactions'});
        });
    });

});

但是当访问该路由时,我收到以下错误:

Uncaught Error: assertion failed: The route interactions was not found core.libs.js:2236
Uncaught Error: You cannot modify child views while in the inBuffer state core.libs.js:19298

所以我还添加了一个空的 InteractionsRoute 但这并没有解决它:

Social.InteractionsRoute = Ember.Route.extend();

有人对可能出现的问题有意见吗?

此外,我正在尝试向界面添加一个按钮,如下所示:

{{#linkTo "interactions"}}@ Interactions{{/linkTo}}
4

2 回答 2

2
Social.Router.map(function() {
    this.resource('accounts',  { path: '/accounts' }, function(){
        this.resource('account', { path: ':account_id'}, function(){
            this.route('interactions', { path: '/interactions'});
        });
    });

});

像这样,交互的 URL 是 #/interactions

但是你想要这个:#/accounts/56/interactions 因此你需要在交互的路径钩子中删除前面的斜杠,否则你将指示该路由将从根访问。

Social.Router.map(function() {
    this.resource('accounts',  { path: '/accounts' }, function(){
        this.resource('account', { path: ':account_id'}, function(){
            this.route('interactions', { path: 'interactions'});
        });
    });

});

顺便说一句,如果您不声明路径挂钩,则 url 将与路由名称相同。所以你也可以使用这个:

Social.Router.map(function() {
    this.resource('accounts', function(){
        this.resource('account', { path: ':account_id'}, function(){
            this.route('interactions');
        });
    });

});
于 2013-05-22T12:00:56.333 回答
1

尝试从单个记录视图中拆分您的列表。

Social.Router.map(function() {
  this.resource('accounts');
  this.resource('account', { path: '/accounts/:account_id' }, function() {
    this.route('interactions');
  });
});

您的交互路线名称应如下所示:

Social.AccountInteractionsRoute = Ember.Route.extend();

http://emberjs.com/guides/routing/defining-your-routes/上的表格

如果一切都失败了,您可以避免嵌套资源并为每条路线定义路径。

Social.Router.map(function() {
  this.resource('accounts');
  this.resource('account', { path: '/accounts/:account_id' });
  this.resource('account-interactions', { path: '/accounts/:account_id/interactions' });
});
于 2013-05-21T21:08:26.530 回答