Javascript 是否可以在handlebar.js和Ember.js中为几个不同的基础模型使用一个通用模板?

Javascript 是否可以在handlebar.js和Ember.js中为几个不同的基础模型使用一个通用模板?,javascript,templates,ember.js,handlebars.js,Javascript,Templates,Ember.js,Handlebars.js,我在Ember中定义了几个(10+)不同的模型,并设置了资源路由。一切正常。虽然每个模型都有不同的属性,但我想节省编写冗余代码的时间。 让我们先从模型开始。这里有一些例子 型号:客户端 App.Client = DS.Model.extend({ name: DS.attr('string'), clientId: DS.attr('string'), clientSecret: DS.attr('string'), trustedC

我在Ember中定义了几个(10+)不同的模型,并设置了资源路由。一切正常。虽然每个模型都有不同的属性,但我想节省编写冗余代码的时间。 让我们先从模型开始。这里有一些例子

型号:客户端

App.Client = DS.Model.extend({               
    name: DS.attr('string'),
    clientId: DS.attr('string'),
    clientSecret: DS.attr('string'),
    trustedClient: DS.attr('boolean')
});
型号:集团

App.Group = DS.Model.extend({               
    name: DS.attr('string'),
    groupType: DS.attr('string')
});
型号:用户

App.User = DS.Model.extend({               
    email: DS.attr('string'),
    password: DS.attr('string'),
});
还有更多…

问题: 是否可以使用one(而不是10+)把手模板为每个属性和值组合生成标签和文本字段

主意 我从他那里得到了一些想法。按照建议定义一个通用模板似乎已经非常有用了

<script type="text/x-handlebars" data-template-name="general-table-output">
    {{#each metadata}}
        <label>{{name}}</label>
        {{input valueBinding='name'}}        
    {{/each}}
</script>
问题
您知道如何访问控制器中指定的模型并映射出所有属性/值,以便在通用模板中查看它吗?在处理余烬数据时,获取属性有点棘手。这是由于余烬数据覆盖了
Ember.get
的默认实现,因此,当您在余烬数据对象上调用
get
时,它会跳过其内部属性等,以获取模型属性(脏或已提交)。您需要执行
Ember.get(this.get('content'),'constructor.attributes')


var constructor=model.get('firstObject.constructor')
var a=Em.get(构造函数,'attributes')这很好,但它仍然感觉像是在对抗ember。制作这样的通用项会导致必须使用ember的内部,通常我会避免使用它,因为这样会丢失一些内置功能,但这一切都取决于您试图构建的内容。是的。。。我也有同样的印象。我将尝试将事物分解为组件和部分。谢谢你的建议。
<script type="text/x-handlebars" data-template-name="user">
    {{render 'general-table-output' user}}
</script>
App.GeneralTableOutput = Ember.ObjectController.extend({
    metadata: function() {
        var vals = [];
        var attributeMap = this.get('content.constructor.attributes');
        attributeMap.forEach(function(name, value) {
            vals.push(value);   
        });
        return vals;
    }.property('content')
});
attributeMap: undefined