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"}}