我的模型“content.id”包含一个字符串,例如“123”:
{{view Em.TextArea idBinding="content.id"}}
我不只是将此视图的 id 设置为“123”,而是希望它是“message-123”,基本上是自定义正在使用的字符串。遗憾的是,Ember 不允许绑定成为函数,这可以解决我的问题(我可以在控制器上定义这样的函数)。
实现这一目标的最佳方法是什么?
我的模型“content.id”包含一个字符串,例如“123”:
{{view Em.TextArea idBinding="content.id"}}
我不只是将此视图的 id 设置为“123”,而是希望它是“message-123”,基本上是自定义正在使用的字符串。遗憾的是,Ember 不允许绑定成为函数,这可以解决我的问题(我可以在控制器上定义这样的函数)。
实现这一目标的最佳方法是什么?
您可以在控制器(或其他地方)中定义计算属性:
控制器
MyApp.ApplicationController = Ember.Controller.extend({
content: "a-content",
editedContent: function() {
return "message-" + this.get('content');
}.property('content')
});
风景
MyApp.FooView = Ember.View.extend({
tagName: 'p'
});
模板(内容是 a String
,这里)
{{#view MyApp.FooView elementIdBinding="editedContent"}}
{{content}}
{{/view}}
JSFiddle就在这里。
编辑
视图如何看到属性
editedContent
,因为它属于ApplicationController
控制器?
ApplicationView
路由器启动后,在没有ApplicationView
定义的情况下自动渲染, 或其模板。如果您想了解更多详细信息,我建议您阅读 Ember 指南:了解 Ember.js 路由器:入门。
并{{editedContent}}
直接获取控制器editedContent
属性,因为默认视图上下文是它的控制器,您可以在Ember 博客 - 1.0 Prerelease中阅读:
{{#view}}
助手不再更改上下文,而是默认维护父上下文。或者,如果提供,我们将使用控制器属性。您也可以选择直接覆盖上下文属性。顺序如下:
- 指定控制器
- 提供的上下文(通常由 Handlebars 提供)
- parentView 的上下文(对于 ContainerView 的子项)