jQuery 플러그인 데이터 테이블을 사용하는 Ember 프로젝트에서 작업하고 있습니다. 나는 벤더 폴더에 플러그인을 포함시키고 ember-cli에서 플러그인을 참조했다. 지금까지는 그렇게 좋았지 만 목록의 사용자 선택에 따라 동적으로 테이블의 데이터를 변경하려고합니다. 내가 구현하는 방법은 내가, 내가 같은 경로 만 선택 요소가 변경의 id 이후 모델 변경에 transitionToRoute을하고 있어요 (내 페이지의 왼쪽에있는) 내 목록을 클릭 할 때마다ember cli 프로젝트에서 jquery 데이터 테이블을 사용하는 방법
index.hbs
{{#data-table tHeaders=tHeaders elementId="myTableID" data=model}}
{{#each model as |model|}}
<tr>
<td>{{#link-to "anotherRoute" model.id}}{{model.id}}{{/link-to}}</td>
<td>{{ model.type }}</td>
<td><button {{action 'openModal' model.config}}>{{ model.type }}</button></td>
</tr>
{{/each}}
{{/data-table}}
data-table.hbs
<thead>
<tr>
{{#each tHeaders as |tHeaders|}}
<th>{{tHeaders}}</th>
{{/each}}
</tr>
</thead>
<tbody>
{{yield}}
</tbody>
data-table.js
import Ember from 'ember';
export default Ember.Component.extend({
tagName:'table',
classNames:['table','table-bordered','table-striped','mb-none'],
uiSetup: function(){
$('#myTableID').DataTable();
}.on('didInsertElement').observes('data.[]')
});
입니다.
왼쪽에서 다른 ID를 선택하면 모델이 변경되고 데이터 테이블에 새 데이터가 반영되지만 아래에는 기존 데이터가 반영됩니다. 이제 헤더에서 정렬을 클릭하면 테이블이 최신 데이터를 제거하여 이전 데이터로 다시 설정됩니다.
지난 3 일 동안이 문제를 해결했지만 아무 것도 바뀌지 않았습니다. 나는이 문제에 접근 다른 방법은 두 번째 방법의 경우
index.hbs
{{data-table tHeaders=tHeaders elementId="myTableID"}}
data-table.hbs
<thead>
<tr>
{{#each tHeaders as |tHeaders|}}
<th>{{tHeaders}}</th>
{{/each}}
</tr>
</thead>
<tbody>
{{yield}}
</tbody>
data-table.js
import Ember from 'ember';
export default Ember.Component.extend({
tagName:'table',
classNames:['table','table-bordered','table-striped','mb-none'],
uiSetup: function(){
this._super(...arguments);
var table=$('#myTableID').DataTable();
table.clear();
var JSON=[];
for (var i = this.get('data.currentState').length - 1; i >= 0; i--) {
var innerJSON=[];
innerJSON.push("<a {{{action 'link1Clicked' 123}}}>"+this.get('data.currentState')[i].id+"</a>");
innerJSON.push(this.get('data.currentState')[i]._data.type);
innerJSON.push("<button {{{action 'link2Clicked' 123}}}>"+this.get('data.currentState')[i]._data.config+"</button>");
if (this.get('data.currentState')[i].id) {
JSON.push(innerJSON);
}
}
table.rows.add(JSON);
table.draw();
}.on('didInsertElement').observes('data.[]'),
actions:{
link1Clicked(){
console.log('hello');
}
}
});
는, 모든 것이 잘 작동하지만, 그 요소를 동적으로 만들 수 없습니다 타다 남은 요소로 취급 되었기 때문에 대신에 그들은 순수한 HTML 요소는 내가 작업 항목을 캡처 할 수 있습니다 .
내가 뭘 잘못하고 있는지 또는 엠버 클리 프로젝트에서 jQuery 데이터 테이블을 사용하는 데 더 깔끔한 접근법이 있습니다.
정적 데이터에만 작동하지만 동적 데이터에는 작동하지 않는 ember-cli-jquery-datatables addon을 사용해 보았습니다.
미리 감사드립니다. 도움을 주시면 감사하겠습니다.
제안 : 데이터 테이블이 필요합니까? ember-models-table을 사용해보십시오.이 테이블은 데이터 테이블이 제공하는 유사한 기능을 모두 제공 할뿐만 아니라 데이터를 동적으로 바인딩합니다. https://github.com/onechiporenko/ember-models-table –
@ManuBenjamin : 데이터 테이블을 사용해야한다는 것은 아닙니다. 나는 엠버 모델 테이블을 시험해보고 당신을 업데이트 할 것입니다. 응답 주셔서 감사합니다 BTW –
그래, 아무 문제없이 잘 작동합니다. @Manu, 고맙습니다. 많은 시간을 절약 해 줬습니다. –