2012-05-30 42 views
2

我有一个对象的集合(MyApp.instrsController,一个ArrayController),每个对象都有一个名为'动作'(一个浮点数)的属性,我怎样才能使用把手模板显示它?逃生关键字在车把模板

下面是我试过的代码:

<ul> 
{{#each MyApp.instrsController}} 
    <li>{{action}}</li> 
{{/each}} 
</ul> 

但因为“行动”是一个“关键字”,它抛出的JavaScript运行时错误“选项未定义”。

谢谢先进。

回答

1

你可以手动指定,你按属性名称与this.前面寻找在当前上下文属性:

{{this.action}} 
+0

谢谢您的答复。不过,我仍然得到同样的错误。 – user1425025

+0

嗯...这会工作(我*认为*)与香草把手至少...你可以使用'unbound'帮手,我想。 –

+0

仍然失败... – user1425025

1

如果您不能更改属性名称,你可以使用一个计算的属性在你的模型对象,见http://jsfiddle.net/pangratz666/4ZQM8/

把手

<script type="text/x-handlebars" > 
    <ul> 
     {{#each App.controller}} 
      <li>{{actionProp}}</li> 
     {{/each}} 
    </ul> 
</script> 

的JavaScript

App.Object = Ember.Object.extend({ 
    actionProp: function() { 
     return this.get('action'); 
    }.property('action') 
}); 


App.controller = Ember.ArrayController.create({ 
    content: [], 

    addObj: function(number) { 
     this.pushObject(App.Object.create({ 
      action: number 
     })); 
    } 
}); 

如果没有自定义模型对象,你可以使用在一个的CollectionView计算性能,见http://jsfiddle.net/pangratz666/r6XAc/

把手

<script type="text/x-handlebars" data-template-name="item" > 
    {{actionProp}} 
</script>​ 

JavaScript

Ember.CollectionView.create({ 
    contentBinding: 'App.controller', 
    itemViewClass: Ember.View.extend({ 
     templateName: 'item', 
     actionProp: function(){ 
      return this.getPath('content.action'); 
     }.property() 
    }) 
}).append(); 
1

我认真地建议你只是改变属性的名称。 您正在花时间研究一个不属于您的域的核心问题。

YAGNI。吻。

在编程中学习的最大教训是如何让事情做成和完成,而不是如何操纵JavaScript而不要对使用保留关键字进行惩罚。如果你没有脆弱的解决方案,看起来很棘手的话,你会更快乐。

既然这是一个浮点数,我可以建议你使用“actionLevel”吗?

-2

只使用model.property,如:

{{input class="input-xlarge" value=model.content }}