5

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

      {{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()
}

这可以正常工作并填充选择列表,但仅使用已加载到浏览器中的风险类别子集。如果我从浏览器控制台调用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对象应被视为存储在数据库中的不可变常量集合。每个App.Facility对象都与这些App.RiskCategories之一相关联

谢谢!

4

3 回答 3

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"}}
于 2013-01-31T16:55:41.650 回答
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事件时,由于该对象已经被抛出异常修改的。

于 2013-02-01T06:40:22.887 回答
0

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

于 2013-04-03T20:09:18.610 回答