将ember对象的数组从ember组件传递给模板

时间:2015-04-08 15:33:54

标签: javascript arrays ember.js ember-data handlebars.js

我正在尝试使用ember组件来实现可重用性。我试图让车把模板代码免费,模板只是我从控制器/组件传递的字段/内容的持有者。

我在以下实现中遇到了一个奇怪的问题

问题1:当我将对象数组传递给Ember.select contentBinding时,它会给我以下错误

Uncaught Error: Assertion Failed: The value that #each loops over must be an Array. You passed {_direction: fwd, _from: <Ember.Object:ember257>,<Ember.Object:ember258>, _to: content, _directionMap: [object Object], _readyToSync: true, _oneWay: undefined}

问题2:没有发生对模型的值绑定。我想将每个字段的值绑定到模型对象。

这是我的代码:

App.Core.CeGender = [
  Ember.Object.create({ value: "Male", id: 'Male' }),
  Ember.Object.create({ value: "Female", id: 'Female' })
  ],


App.Core.fooFields = [
Ember.Object.create({
    type: Ember.TextField,
    firstName: "",
    label: "First Name",
    value: "controller:model.firstName"
}), Ember.Object.create({
    type: Ember.TextField,
    label: "Middle",
    name: "middleInitial",
    placeholder: "Middle",
    value: "controller:model.middleName"
}),
Ember.Object.create({
    type: Ember.Select,
    contentBinding: App.Core.CeGender,
    placeholder: "gender",

}),

这是我的组件:

App.Core.Component = Ember.Component.extend({
    tagName: '',
    title: 'Your Information',
    classNames: ["xxxxx"],
    layoutName: "xxxx",
    fields: App.Core.fooFields ,

});

这是我的组件脚本:

<script type="text/x-handlebars" data-template-name="components/xxxx">
{{#each field in fields}}
           {{ view field.type

            contentBinding=field.contentBinding
            name=field.name
            id=field.name
            placeholder=field.placeholder
            data-rule-required=field.dataRuleRequired
            data-rule-alphachar=field.dataRuleAlphachar
            data-msg-required=field.dataMsgRequired
            data-rule-maxlength=field.dataRuleMaxlength
            data-set=field.dataSet
            data-validation=field.dataValidation
            optionValuePath=field.optionValuePath
            optionLabelPath=field.optionLabelPath
            pattern=field.pattern
            }}
       {{/each}}

</sript>

非常感谢任何帮助!!

注意:对于问题1:如果我将App.Core.fooFields作为json元素数组传递给例如:

App.Core.fooFields = [{
        type: Ember.TextField,

    },
{type: Ember.select,
contentBinding: App.Core.CeGender,
},]

我没有看到上面提到的错误,而contentbinding正在将此数组添加到模板中的字段中。我不知道为什么在这些情况下,余烬的行为方式不同。

1 个答案:

答案 0 :(得分:0)

问题就在这里:

Ember.Object.create({
  type: Ember.Select,
  contentBinding: App.Core.CeGender,
  placeholder: "gender"
})

您应该更改&#39; contentBinding&#39;简单的内容&#39; - 因为你实际上没有绑定任何东西:

Ember.Object.create({
  type: Ember.Select,
  content: App.Core.CeGender,
  placeholder: "gender"
})

您的模板还需要引用.content而不是.contentBinding