这是一个简单的例子
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 模板。我想我需要手动编译这个,但我不确定如何传递正确的上下文。
最佳答案
我有一个工作示例 here . 基本上,通过使 View 的模板成为计算属性,您可以在将模板传递到 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 模板的性能。
关于javascript - 我怎样才能在 Ember 中输出一个字符串,同时它仍然被 handlebars 解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14023783/