1

我的模型“content.id”包含一个字符串,例如“123”:

{{view Em.TextArea idBinding="content.id"}}

我不只是将此视图的 id 设置为“123”,而是希望它是“message-123”,基本上是自定义正在使用的字符串。遗憾的是,Ember 不允许绑定成为函数,这可以解决我的问题(我可以在控制器上定义这样的函数)。

实现这一目标的最佳方法是什么?

4

1 回答 1

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'
});

模板(内容是 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 的子项)
于 2012-11-05T18:55:46.323 回答