Ember.js 链接到不拾取参数
我想{{linkTo}按日期发送/activities/:user/:路径: 如果我直接将参数放入URL中,控制器将正常工作,我只希望我的应用程序模板使用这些参数的合理硬编码值集链接到此URL。我试图通过在ApplicationController中设置一个实例变量来实现这一点: 我认为在应用程序模板中有链接:Ember.js 链接到不拾取参数,ember.js,Ember.js,我想{{linkTo}按日期发送/activities/:user/:路径: 如果我直接将参数放入URL中,控制器将正常工作,我只希望我的应用程序模板使用这些参数的合理硬编码值集链接到此URL。我试图通过在ApplicationController中设置一个实例变量来实现这一点: 我认为在应用程序模板中有链接: {{#linkTo "activities.by_date" activityDefaults}}Activities{{/linkTo}} 很遗憾,这不起作用,将URL解析为: /a
{{#linkTo "activities.by_date" activityDefaults}}Activities{{/linkTo}}
很遗憾,这不起作用,将URL解析为:
/activities/undefined/undefined
任何和所有的帮助都将不胜感激
-=-=-=-=-=-=-=-=-=-=-=更新-=-=-=-=-=-=-=-=-=-=
我已尝试将ActivityDefault设置为余烬对象:
module.exports = activityDefaults = Ember.Object.create({
user_id: 1,
by_date: "2012-07-12"
});
然后我向ActivitiesByDateController添加了一个序列化程序:
{{linkTo}}仍然不起作用,但有细微的区别。将鼠标悬停在链接上,您将不再看到基本URL之外的任何URL注意:在它有/activities/undefined/undefined之前。此外,当您单击链接时,它会将以下消息发送到浏览器控制台:
此链接处于非活动加载状态,因为至少有一个其参数当前具有空/未定义的值,或者提供的路由名称无效
注:
我确实将on_date/by_date的不一致用法改为一致使用by_date命名约定。当余烬转换带下划线的变量并将它们转换为camelCase时,我有点模糊。我不认为我会遇到这种情况,但它一直困扰着我 您应该连接到serialize函数,并提供URL解析所需的动态段,前提是用户id和日期是活动模型上可用的属性:
然后,假设您的linkTo helper活动作为可用模型存在于何处,它将如下所示:
{{#linkTo "activities.by_date" activity}}Activities{{/linkTo}}
同样值得一提的是,如果你在某天命名你的路线,你应该以同样的方式命名你的模板,反之亦然。Ember在很多方面都与约定有关,如果你不想自己在某个时候遇到严重错误,你应该与应用程序中的命名保持一致
这就是说,在我看来,你应该在你的路由器地图上重新命名你的路由,因为你稍后会在serialize钩子中找到它,所以动态段可以有一个不同的名称
this.resource('activities', { path: '/activities' }, function() {
this.route('by_date', {path: '/:user/:on_date'});
});
如果你现在问他怎么知道我的路线叫做ActivitiesByDateRoute?我在你的另一个问题上看到了:
希望能有帮助。LOL。是的,我从ByDate大会开始,然后开始更喜欢OnDate。我一直想让它们保持一致,但并没有意识到这实际上可能会因为恩伯的命名约定假设而导致问题。我想还有一个保持一致的原因。顺便说一句,我确实尝试过序列化方法,但它对我不起作用。起初我认为这是因为activityDefaults不是Ember对象,因此没有get方法,但我尝试在序列化程序中进行直接赋值,例如user\u id:model.user\u id,但也失败了。序列化程序是否强制将发送给它的参数设置为余烬对象?最后一步,我尝试将activityDefaults设置为余烬对象,但除非我弄错了该对象的范围,否则它的行为似乎也不正确。注意:当我现在单击linkTo链接时,它会发送消息,该linkTo处于非活动加载状态,因为它的至少一个参数当前具有空/未定义的值。我将把代码片段添加到问题中。
serialize: function(model) {
return {
user_id: model.get('user_id'),
by_date: model.get('by_date')
};
}
App.ActivitiesByDateRoute = Ember.Route.extend({
...
serialize: function(model) {
return {
user_id: model.get('user_id'),
on_date: model.get('on_date')
};
}
});
{{#linkTo "activities.by_date" activity}}Activities{{/linkTo}}
this.resource('activities', { path: '/activities' }, function() {
this.route('by_date', {path: '/:user/:on_date'});
});