如何使用mailto href和bindAttr创建一个'a'标记到属性?

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一起去,这就是我最后做的事情,但我同意s.meijer. (3认同)

s.m*_*jer 5

注册一个简单的有界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/