如何根据另一个Ember.Select的选定选项通过计算属性填充Ember.Select选项

时间:2014-02-22 19:28:07

标签: javascript ember.js ember-data

我正努力让这个基本功能在Ember中运行。如何通过计算属性填充Ember.Select视图的选项,该属性观察通过另一个Ember.Select设置的另一个属性?

这是我到目前为止所做的:

HTML / HBS:

<script type="text/x-handlebars">

    {{view Ember.Select
    content=parent
    optionValuePath="content.id"
    optionLabelPath="content.name"
    value=current_parent}}

    {{view Ember.Select
    content=child
    value=current_child}}

</script>

使用Javascript:

App.ApplicationController = Ember.ArrayController.extend({
    content: '', current_parent: null, current_child: null,
    parent: function() {
        return this.store.find('user');
    }.property(),
    child: function() {
        var current_parent = this.get('current_parent');
        if (current_parent) {
            this.store.find('user', current_parent).then(function(parent) {
                return parent.get('children');
            }
        }
    }.property('current_parent')
});

App.User = DS.Model.extend({
    name: DS.attr('string'),
    children: DS.attr(),
});

从服务器返回JSON:

    users: [{id: 0, name: 'test', children: ['child1', 'child2']}]

显然这不起作用。我很感激地解释我在这里出错的地方以及实现这个目的的可行方法。

我正在使用以下库:

  • Ember 1.4.0
  • Ember Data 1.0.0-beta.6
  • Handlebars 1.3.0

提前致谢!

1 个答案:

答案 0 :(得分:1)

我认为你不需要派生属性的孩子。您可以使用已具有children属性的模型本身(用户),而不是使用id作为值。这与您已使用current_parent而非current_parent_id的名称相匹配。

{{view Ember.Select
contentBinding=parent
optionLabelPath="content.name"
value=current_parent}}

{{view Ember.Select
contentBinding=current_parent.children
value=current_child}}

在控制器上只需删除子属性。

希望这有帮助。