此代码应为用户提供一个屏幕,以更新您的投资组合的模板。
在此屏幕中,服务器始终返回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
投资组合
{{#each tmpl in templates}}
<button {{action 'changeTemplate' tmpl}}> {{ tmpl.title }} </button>
{{/each}}
<h3>Template {{ template.title }}</h3>
当用户为当前投资组合选择新模板时,此代码可以正常工作。例:
使用模板1打开投资组合
更改为模板2
保存
但是,如果选择先前选择的模板,这将不起作用。例:
使用模板1打开投资组合
更改为模板2
再次更改为模板1不起作用
在上一个示例的第三步中,屏幕未更新,并且控制台记录了日志:
selectedTemplate.id => 1
model.teplate.id => 2
--------
即,
@set 'model.template', @get('selectedTemplate')
不会更新template
的portfolio
属性。我陷入了这个错误。有帮助吗?
最佳答案
这是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
之间创建依赖项
无需使用观察者即可在模型上设置模板,您可以直接在操作处理程序中进行设置。
关于javascript - Ember 之集归属于联想仅在第一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26263213/