Javascript 如何在Ember中输出字符串,同时仍由Handlebar进行解释?

Javascript 如何在Ember中输出字符串,同时仍由Handlebar进行解释?,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,这里有一个简单的例子 MyApp.ApplicationController = Ember.Controller.extend({ content: "some @user", parsedContent: function() { return this.get("content").replace("@user", "<a {{action gotoUser 'user'}}>user</a>"); }.property("content") }

这里有一个简单的例子

MyApp.ApplicationController = Ember.Controller.extend({
  content: "some @user",
  parsedContent: function() {
    return this.get("content").replace("@user", "<a {{action gotoUser 'user'}}>user</a>");
  }.property("content")
});
MyApp.ApplicationController=Ember.Controller.extend({
内容:“some@user”,
解析内容:函数(){
返回这个。获取(“内容”)。替换(“用户”),“

我有一个工作示例。 基本上,通过将视图的模板设置为计算属性,您可以在将模板传递到Handlebar解析器之前对其进行修改

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"}}
MyApp.linkedUserView=Ember.View.extend({
模板:函数(){
template=this.get(“content”).replace(/@(\w+)/g,{{view MyApp.UserLinkView username=“$1”}}”);
返回Ember.handlebar.compile(模板);
}.property()
});
MyApp.UserLinkView=Ember.View.extend({
标记名:“span”,
用户:函数(){
返回MyApp.User.findByUsername(this.get('username');
}.property(),
模板:Ember.handlebar.compile(“”)
}); 
{{view MyApp.linkedUserView content=“some@user with@other_user”}

不过,我不确定每次编译把手模板的性能。

虽然它似乎可以工作,但它不会绑定数据。请尝试执行
MyApp.get(“router.applicationController”).set(“content”,“whatever”)
在JSFIDLE中,它不会重新呈现模板。同样,性能方面的问题,快速修复方法是将把手更改为
{{{with content}{{view MyApp.linkedUserView contentBinding=“this”}{{{/with}}
或者你可以创建一个观察者,当内容发生变化时,它会重新呈现视图。是的,观察者似乎可以工作,但是你知道为什么
.property(“content”)
本身不能工作吗?我想它和观察者一样绑定到变化
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"}}