ember: 如何将带 href 的锚标记转换为 link-to?

ember: how to convert anchor tag with href to link-to?

在我们的 ember 应用程序中,我有一些奇怪的要求。

我正在从 api 收到发往同一应用程序中其他页面的消息 link。

例如:"offers/1/checkout"

收到的消息是:

"Thanks for the reply. <a href='offers/1/checkout'>Click here</a> to proceed further"

现在,当我们使用上面的消息时,将其显示在模板中,当用户单击 单击此处 link 时,整个应用程序将重新加载。

有什么方法可以停止重新加载应用程序吗?或者我们可以使用 link-to 助手将简单的 href 转换为 link 吗?

谢谢

非常感谢@ember-sherpa。 从他上面给出的参考https://github.com/intercom/ember-href-to/blob/master/addon/helpers/href-to.js#L14-L37

我添加了一个组件如下app/components/href-to-link.js

// Manually added anchor tags causes whole app to reload.
// This component will treat anchor tag as link-to links.
// Ex: <a href="/offers/1/plan_delivery"></a> will be trated as route "offers.plan_delivery"

import Ember from 'ember';

export default Ember.Component.extend({

  _getNormalisedRootUrl: function(router) {
    var rootURL = router.rootURL;
    if(rootURL.charAt(rootURL.length - 1) !== '/') {
      rootURL = rootURL + '/';
    }
    return rootURL;
  },

  didInsertElement() {
    var _this = this;
    var router = this.container.lookup("router:main");

    Ember.$().ready(function (){
      Ember.$(".received_message, .my_message").on('click', 'a', function(e) {
        var $target = Ember.$(e.currentTarget);
        var handleClick = (e.which === 1 && !e.ctrlKey && !e.metaKey);

        if(handleClick && !$target.hasClass('ember-view') && Ember.isNone($target.attr('data-ember-action'))) {

          var rootURL = _this._getNormalisedRootUrl(router);
          var url = $target.attr('href');

          if(url && url.indexOf(rootURL) === 0) {
            url = url.substr(rootURL.length - 1);

            if(router.router.recognizer.recognize(url)) {
              router.handleURL(url);
              router.router.updateURL(url);
              return false;
            }
          }
        }
        return true;
      });
    });
  }

});

用作:

{{#href-to-link}}
  ...
{{/href-to-link}}

这很好用!! 希望这对其他人也有帮助:)