我的模型“content.id”包含一个字符串,e,g“123”:
{{view Em.TextArea idBinding="content.id"}}
我不想将此视图的id设置为“123”,而是希望它是“message-123”,基本上是自定义正在使用的字符串。遗憾的是,Ember不允许绑定成为函数,这可以解决我的问题(我可以在控制器上定义这样的函数)。
实现这一目标的最佳方式是什么?
答案 0 :(得分:3)
您可以在控制器(或其他地方)中定义计算属性:
控制器
MyApp.ApplicationController = Ember.Controller.extend({
content: "a-content",
editedContent: function() {
return "message-" + this.get('content');
}.property('content')
});
视图
MyApp.FooView = Ember.View.extend({
tagName: 'p'
});
模板(其中内容为String
,此处为
{{#view MyApp.FooView elementIdBinding="editedContent"}}
{{content}}
{{/view}}
修改强>
视图如何查看属性
editedContent
,因为它属于ApplicationController
控制器?
路由器启动后,在没有定义ApplicationView
时自动呈现ApplicationView
或其模板。如果您想了解更多细节,建议您阅读Ember指南:Understanding the Ember.js Router: A Primer。
{{editedContent}}
直接获取控制器editedContent
属性,因为默认视图上下文是其控制器,您可以在Ember Blog - 1.0 Prerelease中读到:
{{#view}}
助手不再更改上下文,而是默认维护父上下文。或者,如果提供,我们将使用controller属性。您也可以选择直接覆盖context属性。订单如下:
- 指定的控制器
- 提供的上下文(通常由Handlebars提供)
- parentView的上下文(适用于ContainerView的子级)