我正在使用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 helper),并在选定的'strat中显示详细信息(即strat.id,strat.stratName和strat.stratDetail) ' 在右侧。要添加一个新的'strat',我使用一个连接到动作函数“newStrat”的按钮,如下所示。
添加新孩子时,当已经存在另一个孩子时,一切都正确显示(例如,添加第二个和后续孩子时一切正常)。但是如果我正在添加第一个子节点,则strat.Id不会显示在左侧,但是strat.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>