使用Ember-data检索从RecordArray中填充Ember.Select视图的内容

时间:2013-01-31 16:06:44

标签: ember.js

我有一个使用此代码创建的选择列表:

      {{view Ember.Select
      contentBinding="App.riskCategories"
      optionValuePath="content.id"
      optionLabelPath="content.name"
      selectionBinding="riskCategory"
      class="input-medium"}}

riskCategory 是为模板加载的 App.Facility 模型的属性, App.RiskCategory 列表中填充了此代码:

App.ready = function() {
  App.riskCategories = App.RiskCategory.all()
}

这样可以正常工作并填充选择列表,但只有已经加载到浏览器中的Risk Categories子集。如果我从浏览器控制台调用 App.RiskCategory.find(),则会加载其余部分并更新选择列表但是我无法让代码为我这样做。

所以我试过了:

App.ready = function() {
  App.riskCategories = App.RiskCategory.find()
}

或:

App.ready = function() {
  App.RiskCategory.find()
  App.riskCategories = App.RiskCategory.all()
}

但这两个都会导致以下错误:

Uncaught Error: Attempted to handle event `loadedData` on <App.Facility:ember417:1> while in state rootState.loaded.updated.uncommitted. Called with undefined

我很感激有关填写选择列表的更好方法的任何帮助或建议。应将这些 App.RiskCategory 对象视为存储在db中的常量的不可变集合。每个 App.Facility 对象都与其中一个 App.RiskCategories

相关联

谢谢!

3 个答案:

答案 0 :(得分:3)

请尝试在路线中设置类别,并通过控制器在模板中访问

APP.YourRoute = Ember.Route.extend({
    setupController:function(controller,model) {
       this._super(controller,model);
       controller.set('riskCategories',App.RiskCategory.find());
    },  

});  

假设您的选择视图与控制器位于同一上下文中,您可以通过以下方式访问模板中的类别:

{{view Ember.Select
  contentBinding="controller.riskCategories"
  optionValuePath="content.id"
  optionLabelPath="content.name"
  selectionBinding="riskCategory"
  class="input-medium"}}

答案 1 :(得分:1)

我通过将每个 App.Facility 的呈现包装在{{#if isLoaded}}

中解决了这个问题

所以代码看起来像:

{{#each client.facilities}}
  {{#if isLoaded}}
    {{view Ember.Select
      contentBinding="App.riskCategories"
      optionValuePath="content.id"
      optionLabelPath="content.name"
      selectionBinding="riskCategory"
      class="input-medium"}}
  {{/if}}
{{/each}}

设置 App.RiskCategory App.Facility 对象似乎尚未完成加载,因此默认 App.RiskCategory 正在设置,然后当 dataLoaded 事件被触发时,抛出了异常,因为该对象已被修改。

答案 2 :(得分:0)

我遇到了类似的问题,使用#isLoaded的解决方案对我不起作用。但是,为prompt元素添加Ember.Select属性的做法是什么。我怀疑这与渲染视图和加载数据的异步性有关(在我的例子中来自FIXTURES,但据我所知DS.FixtureAdapter模拟加载数据的时间滞后)。