내 모델을 하나의 구성 요소에 표시하고 하나의 테이블에 표시하려고합니다. 이 모듈을 다른 모델에도 사용할 수있는 방식으로 모듈화하고 싶습니다.한 구성 요소에 관계가있는 엠버 디스플레이 모델
특정 관계가있는 속성을 수행 한 방식이 표시되지 않습니다. 내가 발견 한 문제는 약속을 지키지 않았고 {{ember-data}}를 사용하여 속성을 포착하지 않기 때문입니다. 내가 그 일을 한 가지 방법을 파악하지 못할 ... 나는 엠버 정말 새로 온 사람과 '나를 위해 문제 ...
UPDATE
아래의 모든 설명을 읽기 전에하고, 물건 모델을 하나의 배열로 변환하면 충분할 것입니다. 그래서, 나는 이런 식으로 뭔가 할 수있는 : UPDATE의
{#each model as |item|}}
<tr>
{{#each item as |column index|}}
<td>{{column.[index]}} </td>
{{/each}}
</tr>
{{/each}}
END를
내가 가지고있는 다음과 같은 두 가지 모델
// #models/inventory-summary.js
export default DS.Model.extend({
name: DS.attr('string'),
total: DS.attr('number'),
projects: DS.hasMany('inventoryProject'), //I WANT TO SHOW THIS GUY HERE
});
// #models/inventory-project.js
export default DS.Model.extend({
name: DS.attr('string'), // IN PARTICULAR THIS ONE
summary: DS.hasMany('inventorySummary'),
});
템플릿 :
// #templates/inventory-summary.js
// here I'm sending the model to the component and mapping the attribute to something readable
{{model-table model=inventorySearchResult columnMap=columnMap}}
// #templates/components/model-table.hbs
// here is where I show the value of the model
{{#each model_table.values as |item|}}
{{getItemAt item index}}
{{/each}}
내 도우미
그리고 내 길에 내가 뭘 6,:
// #routes/inventory-summary.js
model(params) {
let query_params = {page_size: 100};
if (params.page !== undefined && params.page !== null) {
query_params['page'] = params.page;
}
return Ember.RSVP.hash({
inventoryProject: this.get('store').findAll('inventoryProject'),
inventorySummary: this.get('store').query('inventorySummary', query_params),
});
},
setupController(controller, models) {
this._super(...arguments);
controller.set('projects', models.inventoryProject);
controller.set('inventorySearchResult', models.inventorySummary);
let columnMap = [
['name', 'Name ID',],
['total', 'Total'],
['projects', 'Project', {'property': 'name', 'has_many': true}]
];
controller.set('columnMap', columnMap);
},
마지막으로이 내가 템플릿에 내가 노력하고있어 값을 전달하고있어 어디있는 정말 엉망 코드의 일부이다 나는 한 무리의 일을 시작하는 경우 템플릿에 표시 할 수 있어요
// #components/model-table.js
getValueForColumn(values, params) {
if (values.length > 0) {
if (typeof values[0] === "object") {
return this.getResolved(values, params);
} else {
return values;
}
}
return values;
},
getResolved(promise, params) {
let result = [];
promise.forEach((data) => {
data.then((resolved) => {
let tmp = "";
resolved.forEach((item) => {
console.log(item.get(property)); // THIS GUY SHOWS UP LATER
tmp += item.get(property) + ", ";
});
result.push(tmp);
});
});
return result; // THIS GUY RETURN AS EMPTY!
},
didReceiveAttrs() {
this._super(...arguments);
let model = this.get('model');
let columnMap = this.get('columnMap');
for (var i = 0; i < columnMap.length; i++) {
attributes.push(columnMap[i][0]);
columns.push({'name': columnMap[i][1], 'checked': true});
values.push(this.getValueForColumn(model.getEach(columnMap[i][0]), columnMap[i][2])); //WRONG HERE
}
this.set('model_table', {});
let model_table = this.get('model_table');
Ember.set(model_table, 'values', values);
},
을 표시하는 경우에 년대 {{템플릿}} 나는 템플릿 내가 수 없어요하고 해결 장정을 수행 믿기 때문에 나중에, 그러나 그것은 정말로 추하고 불쾌했다. 나는 더 깨끗한 것을하고 싶었습니다 ... 그래서 여기에 게시하고 있습니다.
이 Ember.observer를 사용하는 것보다 더 나은 것 같다(). 나는 그것에 대해 살펴보고 곧 돌아올 것입니다 ... – mk2
실제로 사용하고있는 구성 요소에 대한 afterModel()이 없기 때문에 실제로이 기능이 작동하지 않습니다. 'model = inventorySearchResult'에서 템플릿에 결과를 전달합니다. – mk2
여러분도 model()에서 똑같이 할 수 있습니다. – Sandeep