在车把模板中转义关键字

时间:2012-05-30 02:17:58

标签: ember.js

我有一组对象(MyApp.instrsController,一个ArrayController),每个对象都有一个名为'action'的属性(浮点数),如何使用把手模板显示它?

以下是我尝试过的代码:

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

但是由于'action'是'关键字',它会抛出javascript运行时错误'选项未定义'。

先谢谢。

4 个答案:

答案 0 :(得分:1)

您可以通过在属性名称前加this.来手动指定您在当前上下文中查找属性:

{{this.action}}

答案 1 :(得分: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();

答案 2 :(得分:1)

我认真地建议您只更改属性的名称。 您花时间处理不属于您的域的核心问题。

YAGNI。 KISS。

在编程中要学到的最大教训是如何完成任务,而不是如何操纵javascript而不是使用保留关键字。如果你没有一个看起来难以理解的脆弱解决方案,那么你以后会更开心。

由于这是一个浮点数,我可以建议您使用“actionLevel”吗?

答案 3 :(得分:-2)

只需使用model.property,例如:

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