4

我有一个模板,它的定义开始于:

App.PasswordInputComponent = Ember.TextField.extend({
    templateName: 'templates/components/text-input-component',
    layoutName: 'templates/components/text-input-layout',

如果没有设置这两个属性,它将选择组件的默认模板,即“模板/组件/密码输入”。令人惊讶(阅读:令人失望)是它实际上加载了这个默认值并且忽略了这两个参数!

文档指出,这两个属性的行为与它们的View父类相同,但到目前为止,这不是我的经验。谁能告诉我他们是否有这个工作?

4

3 回答 3

2

我发现如果你指定:

templateName: 'components/text-input-component'

您可以让组件使用这样命名的模板,但您还需要通过该名称引用车把助手:

{{text-input-component}}

而不是:

{{password-input}}

不知道为什么它会这样工作。

于 2013-10-15T02:56:10.473 回答
1

对于那些仍在寻找这个答案的人,这就是我所做的:

App.MyFirstComponent = Ember.Component.extend({
    title: 'Hello'
});

这将检查 中的模板components/my-first,其内容如下:

{{title}} World

然后,为了扩展这个组件并使用相同的布局,我这样做:

App.MySecondComponent = App.MyFirstComponent.extend({
    layoutName: 'components/my-first',
    title: 'Goodbye, Cruel'
});

现在,调用两者:

{{my-first}} // output: Hello World

{{my-second}} // output: Goodbye, Cruel World
于 2015-03-03T22:54:29.727 回答
0

您不能layoutName在组件上指定 a,因为 Handlebars 帮助程序的块内容被解释为模板,而您指定的模板成为布局。所以没有定义layoutName的选项。

此提交中的更多信息:https ://github.com/emberjs/ember.js/commit/6f6247f54e1f2b841f73dedd274e962b3703ca1d

在组件中,调用它时传递的块(在把手模板中)被解释为它的模板,而注册为的模板components/my-component成为它的布局。

和 API 文档:http ://emberjs.com/api/classes/Ember.ComponentTemplateDeprecation.html

于 2014-06-20T13:25:53.830 回答