我正在使用 Ember 1.2、Handlebar 1.12 和 EmberModel(不是 EmberData)。
在我的应用程序中,我的路线图中有共同的父/子关系,其简单模型类似于下图所示。
App.Router.map(function () {
this.resource('strats', {path: "/"}, function() {
this.route('strat', {path: "/strat/:strat_id"});
});
});
App.Item = Ember.Model.extend({
id : Ember.attr(),
itemName : Ember.attr()
});
App.Strat = Ember.Model.extend ({
id : Ember.attr(),
stratName : Ember.attr(),
stratDetail : Ember.attr(),
items : Ember.hasMany ('App.Item', {key: 'items', embedded: true})
});
与许多示例一样,我在左侧显示strat.id(使用Handlebar #each 助手),在右边。为了添加一个新的“strat”,我使用了一个连接到动作函数“newStrat”的按钮,如下所示。
添加新孩子时,如果已经有另一个孩子在场,一切都会正确显示(例如,添加第二个和后续孩子时一切正常)。但是如果我要添加第一个孩子,strat.Id 不会显示在左侧,但 str.id、strat.stratName 和 strat.stratDetail 会显示在右侧。如果我然后调用 this.get('model').save() 并点击浏览器的刷新按钮,显示在左侧和右侧都如预期的那样(作为向服务器发送数据的请求的结果,服务器回复所有保存的数据)。
是什么导致了这种行为?有没有办法修复它?
当没有数据时,作为对 findAll() 的回复,我的服务器返回 {"strats":" "}。我为无数据场景返回的内容是否与问题有关?
控制器
App.StratsController = Ember.ArrayController.extend({
actions: {
newStrat: function() {
var nwStrat =
{
id: "newId",
stratName: "untitled",
stratDetail: "someDetail"
};
var newStrat = App.Strat.create (nwStrat);
this.get('model').pushObject(newStrat);
this.transitionToRoute ('strats.strat', newStrat);
}
}});
显示左侧的模板中的代码片段
<div class=\"list-group\" style=\"margin-top: 10px\">
{{#each controller}}
{{#linkTo \"strats.strat\" this class=\"list-group-item\"}}
{{id}}
{{/linkTo}}
{{/each}}
</div>