8

プロパティ'contact_email'を持つモデルがあります。mailto:hrefとのリンクを作成したいのですが。

少しわかりやすいことを試してみまし<a {{bindAttr href="contact_email"}}>Email</a>たが、もちろんこれにはmailto:ビットがありません。

mailto:とプロパティcontact_emailを組み合わせるにはどうすればよいですか?

4

6 に答える 6

10

現時点では、実行可能な唯一のアプローチは、計算されたプロパティを使用することです(コメントで説明したように)。

これを頻繁に行う場合、これをより許容できるようにする1つのことは、計算されたプロパティ「マクロ」を作成することです。

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')
});
于 2013-01-14T07:46:24.930 に答える
5

シンプルな境界付き Ember ハンドルバー ヘルパーを登録する ( 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/

于 2014-01-05T15:28:51.880 に答える
3

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: ------------------------------- 
于 2014-05-23T06:23:35.733 に答える
0

ハンドルバー ヘルパーを使用すると、そのようなすべてのユース ケースの問題に対する一般的な解決策になる可能性があります。

フィドルをチェック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: '/'
    })
  })
});
于 2013-01-14T11:08:56.337 に答える
0

concatヘルパーを試してください:

<a href={{concat "mailto:" model.emailAddress}}>{{model.emailAddress}}</a>

于 2016-02-20T22:30:43.287 に答える