我有一个使用此代码创建的选择列表:
{{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
相关联谢谢!
答案 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
模拟加载数据的时间滞后)。