我正在使用Ember 1.0.0和Ember Data(beta)的最新版本,我有一条动态细分无法使用的路线。
我已经定义了以下路线:
PwdMgr.Router.map(function() {
this.resource("passwords", function(){
this.resource("password", {path: "/:password_id"}, function(){
this.route("edit");
});
});
}
在模板passwords.index中,我显示了这样的模型列表:
{{#each}}
<tr>
<td>{{id}}</td>
<td>{{name}}</td>
<td>{{client.name}}</td>
<td>{{service.name}}</td>
<td>{{localisation.name}}</td>
<td>{{status.name}}</td>
<td>{{login}}</td>
<td>{{password}}</td>
<td>
{{#link-to 'password.index' this}}<span class="glyphicon glyphicon-search"></span>{{/link-to}}
{{#link-to 'password.edit' this}}<span class="glyphicon glyphicon-pencil"></span>{{/link-to}}
<span class="glyphicon glyphicon-remove" {{action 'edit' password}}></span>
</td>
</tr>
{{/each}}
我有两个链接,一个链接到路由password.index,另一个链接到路由passwword.edit。我为动态段提供了模型,并且把手正确地创建了URL(/ passwords / 1和/ passwords / 1 / edit)。
我的问题是,当我到达URL /密码/ 1(或/ password / 1 / edit)时,模型不是单个对象而是一个对象数组。
由于我使用默认模式,如指南中所述,我没有设置Route对象。但是出于调试目的,我为password.index路由创建了一个路由对象。这是它的样子:
PwdMgr.PasswordIndexRoute = Ember.Route.extend({
model: function(params){
console.log(params);
return this.get('store').find('password',params.password_id);
},
setupController: function(controller, model){
console.log(model);
}
});
这是我的控制台日志:
Object {} app.js (line 31)
<DS.RecordArray:ember435> { content=[3], store=<DS.Store:ember506>, isLoaded=true, more...} app.js (line 35)
空对象解释了为什么我得到一个对象数组,但是为什么params变量是一个空对象?
非常感谢
[编辑]
我已经改变了我的Router.map:
PwdMgr.Router.map(function() {
this.resource("passwords", function(){
this.route("detail", {path: "/:password_id"});
this.route("edit", {path: "/:password_id/edit"});
});
}):
“详细”和“编辑”路线的动态细分工作正常。我认为问题来自于动态段在嵌套资源中的事实,这很奇怪,因为Emberjs指南的示例是嵌套资源中的动态段。
答案 0 :(得分:0)
密码/ 1似乎不是真正的路由,我会尝试使用密码/ 1,并删除路径上的斜杠。
PwdMgr.Router.map(function() {
this.resource("passwords", function(){
this.resource("password", {path: ":password_id"}, function(){
this.route("edit");
});
});
}
或将其更改为
PwdMgr.Router.map(function() {
this.resource("passwords", function(){});
this.resource("password", {path: "password/:password_id"}, function(){
this.route("edit");
});
}
答案 1 :(得分:0)
感谢Daniel的评论,我发现了我的错误。
我的路线设置如下(在我编辑之前):
passwords
password
password.detail
password.edit
password.index
我使用路线PwdMgr.PasswordsRoute来设置我的模型及其相应的模板密码。
问题是我在密码路由中并直接进入password.detail路由。我认为使用model参数从密码到password.detail(或password.edit)存在问题。
无论如何,一旦我将路线改为PwdMgr.PasswordsIndexRoute并将相应的模板更改为密码/索引,一切都按预期进行。模型通过动态段正确传递。
非常感谢Daniel指出我的错误。