2014-02-22 40 views
4

我很努力使这个基本功能在Ember中工作。我如何通过计算属性填充Ember.Select视图的选项,该属性观察通过另一个Ember.Select设置的另一个属性?如何通过基于另一个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']}] 

和显然这是行不通的。我希望能够解释我在哪里出错,请问可行的方法是什么。

我使用下列库:

  • 灰烬1.4.0
  • 灰烬数据1.0.0-beta.6
  • 把手1.3.0

在此先感谢!

回答

1

我不认为你需要派生财产的孩子。您可以使用模型本身(用户),而不是使用id作为值,而该模型本身已具有children的属性。这匹配你已经使用的名称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}} 

在控制器上简单地删除子属性。

希望这会有所帮助。

+0

辉煌,是的,我们可以确实使用用户模型。这实际上有效!非常感谢米格尔。这是工作代码的[jsbin](http://jsbin.com/zilaz/2/)。但是为什么使用父ID不能在计算的子属性中工作? – ashraf

+0

@Ashraf它应该工作。我建议使用丰富的模型,而不是id,因为它看起来更简单,所以我错过了原始代码的问题。你没有返回任何东西,所以它始终保持未定义状态。这是嵌套回调和异步代码的常见问题。你正在返回'then',它将值返回给回调函数,但不返回属性。你还应该'返回store.find(....'。这应该修复原始代码(未经测试)。如果你有充分的理由去使用id,我会将current_parent重命名为current_parent_id,因为前者意味着它是一个模型 –

相关问题