我有一个模型,具有属性“contact_email”。我想用 mailto: href 创建一个链接。
我已经尝试过稍微明显<a {{bindAttr href="contact_email"}}>Email</a>
的操作,但当然这没有 mailto: 位。
如何将 mailto: 与属性 contact_email 结合使用?
我有一个模型,具有属性“contact_email”。我想用 mailto: href 创建一个链接。
我已经尝试过稍微明显<a {{bindAttr href="contact_email"}}>Email</a>
的操作,但当然这没有 mailto: 位。
如何将 mailto: 与属性 contact_email 结合使用?
目前,唯一可行的方法是使用计算属性(如您在评论中所述)。
如果您发现自己经常这样做,可能会使这更容易忍受的一件事是创建一个计算属性“宏”:
App.computed.mailto = function(property) {
return function() {
return "mailto:" + this.get(property);
}.property(property);
};
然后你可以在你的控制器中这样做:
var mailto = App.computed.mailto;
App.UserController = Ember.ObjectController.extend({
mailtoContactEmail: mailto('contactEmail')
});
注册一个简单的有界 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);
});
并像这样使用它:
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>)
使用的型号:
App.User = DS.Model.extend({
username: DS.attr('string'),
emailAddress: DS.attr('string')
});
这两个值(电子邮件地址以及可选的备用标签)都绑定到模型,并且会在模型更改时更改。
创建了一个 JSFiddle 来演示不断变化的模型:http: //jsfiddle.net/We6B9/
在最新版本的ember cli中,您可以这样做:
在您看来:
export default Ember.View.extend({
layoutName: 'layouts/legal',
templateName: 'views/legal/tou',
tagName: 'main',
classNames: 'view-legal-wrapper',
varViewTitle: 'Terms and Conditions',
varCompanySupportEmail: 'test@gmail.com'
});
在您的车把模板中:
<a href="mailto:{{unbound view.varCompanySupportEmail}}?subject=Support%20Request">{{view.varCompanySupportEmail}}</a>
发这篇文章时的当前设置:
DEBUG: -------------------------------
DEBUG: Ember : 1.5.1
DEBUG: Ember Data : 1.0.0-beta.7+canary.b45e23ba
DEBUG: Handlebars : 1.3.0
DEBUG: jQuery : 2.1.1
DEBUG: -------------------------------
对于所有此类用例,使用 Handlebar Helper 可以是解决问题的通用解决方案
检查小提琴http://jsfiddle.net/devilankur18/YgLRb/1/
var getBindingValue = function(context, options, path) {
var normalized = Ember.Handlebars.normalizePath(null, path, options.data),
thisContext;
if (normalized.isKeyword) {
thisContext = normalized.root;
} else if (!Ember.isGlobalPath(path)) {
thisContext = context;
} else {
thisContext = null;
}
return Em.Handlebars.get(thisContext, normalized.path);
};
Handlebars.registerHelper('mail_to', function(context, options) {
var value = getBindingValue(this, options, context);
return 'href=mailto:' + value
});
var App = Ember.Application.create();
App.ApplicationController = Ember.Controller.extend({ email: "test@somthing.com" });
App.Router = Ember.Router.extend({
enableLogging: true,
root: Ember.Route.extend({
index: Ember.Route.extend({
route: '/'
})
})
});
我只是设法使用标志做到这一点,如下所示:
a href="mailto:{{unbound email}}" Email
这意味着您应该能够执行以下操作:
<a href="mailto:{{unbound email}}">Email</a>
试试concat
帮手:
<a href={{concat "mailto:" model.emailAddress}}>{{model.emailAddress}}</a>