我如何在Ember中输出字符串,同时仍然由把手解释它

How can I output a string in Ember while still having it interpreted by handlebars?

本文关键字:解释 Ember 字符串 输出      更新时间:2023-09-26

下面是一个简单的例子

MyApp.ApplicationController = Ember.Controller.extend({
  content: "some @user",
  parsedContent: function() {
    return this.get("content").replace("@user", "<a {{action gotoUser 'user'}}>user</a>");
  }.property("content")
});

将输出

some @user
some <a {{action gotoUser 'user'}}>user</a>

而不是将内容解释为Handlebars模板。我想我需要手动编译这个,但我不确定如何传递正确的上下文。

这是一个JSFiddle

我这里有一个工作示例。基本上,通过使视图的模板成为计算属性,你可以在将模板传递给Handlebars解析器之前修改它。

MyApp.LinkedUsersView = Ember.View.extend({
    template: function() {
        template = this.get("content").replace(/@('w+)/g, '{{view MyApp.UserLinkView username="$1"}}');
        return Ember.Handlebars.compile(template);
    }.property()
});
MyApp.UserLinkView = Ember.View.extend({
    tagName: "span",
    user: function() {
        return MyApp.User.findByUsername(this.get('username'));
    }.property(),
    template: Ember.Handlebars.compile('<a {{action goToUser view.user href=true}}>@{{view.username}}</a>')
}); 
{{view MyApp.LinkedUsersView content="some @user with @another_user"}}

我不确定每次编译Handlebars模板的性能。