正在访问模型数据成员?需要投吗?

Accessing model data members in action? Need cast?

这一定是一个简单的概念,但它似乎是假定的而不是涵盖... 我有一个简单的模型、期刊和组件,期刊列表:

<select class="form-control" id="journal" onchange={{action 'showJournal' value="target.value"}} >
<option value="" disabled="disabled" selected="selected">Periodicals:</option>
  {{#each model as |journal|}}
    <option value="{{journal}}"> {{journal.name}}</option> 
  {{/each}}
</select>

和操作:

import Ember from 'ember';
export default Ember.Component.extend({
    editstate: Ember.inject.service('edit-state'),
    actions: {
        showJournal(journal) {
            this.get('editstate').selectedJournal = journal;
            alert('got ' + journal.name);
            this.sendAction('displayJournal', journal);
        }
    }
});

据我所知,所选值没有用,操作中的日志实例也没有用。 Ember 知道它是 Journal 类型(例如 <em-journalapp@model:journal::ember385:3>),但我无法通过 journal.name、journal.get('name') 或任何方式访问成员别的我想到了。

我可以传入 journal.id 来查看。但是,如果我从商店中查找模型,变量又没有用。

将模型数据转换或存储在变量中并将其取回有什么神奇之处吗?

我会鼓励你使用 ember-power-select addon

当你说 <option value="{{journal}}"> 时,这将在 html 中呈现,就像 <option value="[object object]"> 你不能为 html 属性存储对象。 所以你需要像这样包含 id <option value={{journal.id}}> 你可以通过选项列表中的 findBy 方法获取所选对象。

Created this twiddle为此。

application.hbs

<select class="form-control" id="journal" onchange={{action 'showJournal' value="target.value"}} >
<option value="" disabled="disabled" selected={{unless editState.selectedJournal.id 'selected'}}>Periodicals:</option>
  {{#each model as |journal|}}
    <option value={{journal.id}} selected={{if (eq editState.selectedJournal.id journal.id) 'selected'}}> {{journal.name}}</option> 
  {{/each}}
</select>

application.js 路由文件,

import Ember from 'ember';
export default Ember.Route.extend({
  model(){
    return [{id:'1',name:'BBC'},{id:'2',name:'TV'}];
  }
});

application.js 控制器文件,

import Ember from 'ember';
export default Ember.Controller.extend({
  editState: Ember.inject.service(),
  appName: 'Ember Twiddle',
 actions: {
        showJournal(journalId) {                        
            this.set('editState.selectedJournal',this.get('model').findBy('id',journalId));
          console.log('Yes ',this.get('editState.selectedJournal'));
        }
    }
});

因为你维护状态就是服务,所以我也这样做了。 编辑-state.js 服务文件

import Ember from 'ember';
export default Ember.Service.extend({
  selectedJournal:{},
});