正在访问模型数据成员?需要投吗?
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 方法获取所选对象。
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:{},
});
这一定是一个简单的概念,但它似乎是假定的而不是涵盖... 我有一个简单的模型、期刊和组件,期刊列表:
<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 方法获取所选对象。
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:{},
});