此代码应为用户提供一个屏幕,以更新您的投资组合的模板。

在此屏幕中,服务器始终返回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')不会更新templateportfolio属性。

我陷入了这个错误。有帮助吗?

最佳答案

这是Ember Data中的错误,已在主版本中修复

https://github.com/emberjs/data/issues/2360

请参阅我的JSBin重现问题

http://emberjs.jsbin.com/haweci/2/edit

您可以注释/取消注释Ember Data的版本并重现该问题。

另外,我还必须修复您的代码才能使其正常工作:


我正在使用RSVP.hashtemplatesportfolio加载到model挂钩中。您不应该对store.find中的setupController进行任何调用
我将portfolio装入PortfolioController,并将templates装入TemplatesController
为了在templates模板中使用portfolio,我使用PortfolioControllerTemplatesControllerneeds之间创建依赖项
无需使用观察者即可在模型上设置模板,您可以直接在操作处理程序中进行设置。

关于javascript - Ember 之集归属于联想仅在第一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26263213/

10-12 13:50