Ton*_*ale 8 handlebars.js ember.js
我有一个模型,有一个属性'contact_email'.我想用mailto:href建立一个链接.
我尝试过稍微明显<a {{bindAttr href="contact_email"}}>Email</a>但当然这没有mailto:bit.
如何将mailto:与属性contact_email结合使用?
Yeh*_*atz 10
目前,唯一可行的方法是使用计算属性(如您在评论中所述).
如果您发现自己经常这样做,那么可能会让这个更容忍的一件事就是创建一个计算属性"宏":
App.computed.mailto = function(property) {
return function() {
return "mailto:" + this.get(property);
}.property(property);
};
Run Code Online (Sandbox Code Playgroud)
然后你可以在控制器中执行此操作:
var mailto = App.computed.mailto;
App.UserController = Ember.ObjectController.extend({
mailtoContactEmail: mailto('contactEmail')
});
Run Code Online (Sandbox Code Playgroud)
注册一个简单的有界Ember Handlebars助手(Em.Handlebars.registerBoundHelper)
Em.Handlebars.registerBoundHelper('mailTo', function (emailAddress, label) {
emailAddress = Em.Handlebars.Utils.escapeExpression(emailAddress);
label = (arguments.length == 2) ? emailAddress : Em.Handlebars.Utils.escapeExpression(label);
var link = '<a href="mailto:' + emailAddress + '">' + label + '</a>';
return new Em.Handlebars.SafeString(link);
});
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
simple mailto link:
{{mailTo emailAddress}}
(output: <a href="mailto:foobar@example.com">foobar@example.com</a>)
mailto link with alternate label
{{mailTo emailAddress username}}
(output: <a href="mailto:foobar@example.com">foobar</a>)
Run Code Online (Sandbox Code Playgroud)
使用的型号:
App.User = DS.Model.extend({
username: DS.attr('string'),
emailAddress: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
这两个值(电子邮件地址以及可选的备用标签)都与模型有关,并且每当模型更改时都会更改.
创建了一个JSFiddle来演示不断变化的模型:http://jsfiddle.net/We6B9/
| 归档时间: |
|
| 查看次数: |
4634 次 |
| 最近记录: |