2016-08-29 4 views
0

私はEmber.jsを把握して、手動でDOMを操作するのではなく、代わりにハンドルバーを使用しています。コンポーネントテンプレート内からEmberコンポーネントデータへのアクセス

コンポーネントのテンプレート内のコンポーネントのデータにアクセスして、データを繰り返し処理してテーブルを作成できるようにしようとしています。これがEmberの方法でないなら、私に知らせてください。モデル、ストア、またはルートにデータセットがありません。すべてがコンポーネント "issue-data"で行われます。ここ

は、コンポーネントとそのテンプレートである:ここ

import Ember from 'ember'; 
 

 
export 
 
default Ember.Component.extend({ 
 
    runAll: null, 
 
    csvData: null, 
 
    initTable: function() { 
 
    function buildTable() { 
 
     var csvFile; 
 
     Ember.$.ajax({ 
 
     url: 'open_issues_data/open_issues_data.csv', 
 
     dataType: 'text', 
 
     async: false, 
 
     success: function(response) { 
 
      csvFile = response; 
 
     }, 
 
     error: function(err) { 
 
      console.log(err); 
 
     } 
 
     }); 
 

 
     Papa.parse(csvFile, { 
 
     complete: function(results) { 
 
      csvFile = results.data; 
 
      this.csvData = csvFile; 
 
     } 
 
     }); 
 

 
     /* Uncomment when ready to implement filter 
 
     options = { 
 
      valueNames: ["issue_number", "customer_id", "date_reported", "location"] 
 
     }; 
 

 
     var myList = new List("table-div", options); 
 
     */ 
 
    } 
 
    buildTable(); 
 
    }.on('didInsertElement'), 
 

 
    didInsertElement() { 
 
    this.runAll = Ember.run.later(this, function() { 
 
     this.initTable(); 
 
     this.runAll = Ember.run.later(this, this.runAll, 60000); 
 
    }, 60000); 
 
    }, 
 

 
    didDestroyElement() { 
 
    Ember.run.cancel(this.runAll); 
 
    } 
 
});
<div id="table-div"> 
 
    <input class="search" placeholder="Filter by your input"> 
 
    <button class="sort" data-sort="issue_number">Sort by Issue #</button> 
 
    <table id='data-table' class='table table-striped table-bordered'> 
 
    <tbody id='table-body' class="list"> 
 
     {{#each row in issue-data.csvData}} 
 
     <tr> 
 
     {{#each column in row}} 
 
     <td>{{column}}</td> 
 
     {{/each}} 
 
     </tr> 
 
     {{/each}} 
 
    </tbody> 
 
    </table> 
 
</div> 
 

 
{{yield}}

ルートについての鋳型である:

<h2>Open Issues Data</h2> 
 
{{issue-data}} 
 

 
{{outlet}}

答えて

-1

Figur https://guides.emberjs.com/v2.7.0/models/

もっと良い方法がありますが、Emberのドキュメントによれば、this.set()でデータにキーを割り当てることができます。右の "この" を得るために、私は新しい変数を使用してスコープを保持:

var _component = this; 
 
var csvFile; 
 
Ember.$.ajax({ 
 
    url: 'open_issues_data/open_issues_data.csv', 
 
    dataType: 'text', 
 
    async: false, 
 
    success: function(response) { 
 
    csvFile = response; 
 
    }, 
 
    error: function(err) { 
 
    console.log(err); 
 
    } 
 
}); 
 

 
Papa.parse(csvFile, { 
 
    complete: function(results) { 
 
    csvFile = results.data; 
 
    this.csvData = csvFile; 
 
    _component.set('issues', this.csvData); 
 

 
    } 
 
});

<div id="table-div"> 
 
    <input class="search" placeholder="Filter by your input"> 
 
    <button class="sort" data-sort="issue_number">Sort by Issue #</button> 
 
    <table id='data-table' class='table table-striped table-bordered'> 
 
    <tbody id='table-body' class="list"> 
 
     {{#each issues as |issue|}} 
 
     <tr> 
 
     {{#each issue as |column|}} 
 
     <td>{{column}}</td> 
 
     {{/each}} 
 
     </tr> 
 
     {{/each}} 
 
    </tbody> 
 
    </table> 
 
</div> 
 

 
{{yield}}

関連する問題