1

ここに簡単な例があります

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>

コンテンツをハンドルバー テンプレートとして解釈する代わりに。このマニュアルをコンパイルする必要があると思いますが、正しいコンテキストを渡す方法がわかりません。

ここにJSFiddleがあります

4

1 に答える 1

2

ここに実際の例があります。基本的に、ビューのテンプレートを計算されたプロパティにすることで、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 テンプレートを毎回コンパイルするパフォーマンスについてはわかりません。

于 2012-12-25T04:31:44.323 に答える