如何绑定Ember View的元素ID?

时间:2012-11-05 18:41:43

标签: ember.js

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

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

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

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

1 个答案:

答案 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}}

JSFiddle is here

修改

  

视图如何查看属性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的子级)
  •