此代码应为用户提供一个屏幕,以更新您的投资组合模板。
在此屏幕中,服务器始终返回5个模板,并且投资组合已经关联了一个模板。
模型
App.Portfolio = DS.Model.extend
color: DS.attr 'string'
template: DS.belongsTo 'template'
App.Template = DS.Model.extend
title: DS.attr 'string'
portfolios: DS.hasMany('template')
路线
App.PortfolioRoute = Ember.Route.extend
setupController: (controller, model) ->
this._super(controller,model);
# load all templates for portfolio screen
controller.set 'templates', this.store.find 'template'
控制器
PortfoliosApplication.PortfolioController = Ember.ObjectController.extend
selectedTemplate: null
testTemplateSelection: (->
@set 'model.template', @get('selectedTemplate')
console.log @get 'selectedTemplate'
console.log @get 'model.template'
console.log '--------'
).observes 'selectedTemplate'
actions:
changeTemplate: (template) ->
@set 'selectedTemplate', template
portfolio.hbs
{{#each tmpl in templates}}
<button {{action 'changeTemplate' tmpl}}> {{ tmpl.title }} </button>
{{/each}}
<h3>Template {{ template.title }}</h3>
当用户为当前产品组合选择新模板时,此代码可以正常工作。例如:
但如果选择之前选择的模板,则无效。例如:
在最后一个示例的第三步,屏幕没有更新,控制台记录:
selectedTemplate.id => 1
model.teplate.id => 2
--------
即,@set 'model.template', @get('selectedTemplate')
没有更新template
的{{1}}属性。
我陷入了这个错误。任何帮助?
答案 0 :(得分:2)
这是Ember Data中的一个错误,已在主
中修复https://github.com/emberjs/data/issues/2360
请参阅我的JSBin以重现问题
http://emberjs.jsbin.com/haweci/2/edit
您可以评论/取消注释Ember Data的版本并重现该问题。
此外,我必须修改您的代码才能使其正常工作:
RSVP.hash
在templates
挂钩中加载portfolio
和model
。您不应该致电store.find
setupController
portfolio
加载PortfolioController
,templates
加载TemplatesController
。templates
模板中使用portfolio
,我使用PortfolioController
TemplatesController
和needs
之间创建了依赖关系
答案 1 :(得分:0)
App.Template needs属于App.Portfolo:
App.Portfolio = DS.Model.extend({
color: DS.attr('string'),
template: DS.belongsTo('template')
});
App.Template = DS.Model.extend({
title: DS.attr('string'),
portfolio: DS.belongsTo('portfolio'),
portfolios: DS.hasMany('template')
});
有关Cyril Fluck的jsbin的固定版本,请参阅here