2016-04-27 4 views
0

私はemberjsを学んでいて、ベアボーンタスクを与えられています。emberモデル - アイテムのテーブルを作成する詳細をご覧になるには

私のモデルから表示されたユーザーのテーブルがあります。テーブルの横には、選択したユーザーの詳細が表示される領域があります。したがって:

ID FNAME LNAME   | DETAIL: User 2 
1 Andy Ashford  | First: Betty 
2 Betty Beckett  | Last: Beckett 
         | Phone: 222-222-2222 

私はLEFT側が正しく動作していますが、RIGHT側は動作していません。

(私はデータをロードするためにミラージュを使用しています。私は仕事にのhttp-モックを取得するように見えることができませんでした)。

つの質問:

  1. が、私はこの直接スクリプト内または

  2. 私はパスを使用する必要があります

    • ルートべきでしょうか?つまり、usersテーブルだけが表示されているときは、私のパスは/ users /ですが、ユーザ1をクリックするとパスが/ user/1に設定され、その後すべてのロジックが実行されます。
  3. どちらの方法でも、特定のユーザーデータをユーザーディテールコンポーネントにどのように配信するのですか?モデルをビューにどのように向けるのですか?ここで

は私ミラージュ/ config.jsの(ミラージュは、設定ファイル内のデータを保持する理由を知っているが、...しないでください)

this.get('/users', function() { 
    return { 
     data: [{ 
      type: 'users', 
      id: 1, 
      attributes: { 
       fname: 'Andy', 
       lname: 'Ashford', 
       phone: '111-111-1111', 
      } 
     }, { 
      type: 'users', 
      id: 2, 
      attributes: { 
       fname: 'Betty', 
       lname: 'Beckett', 
       phone: '222-222-2222', 
      } 
     }] 
    }; 
}); 

マイモデル/ user.jsのです(これが機能している

import Model from 'ember-data/model'; 
import attr from 'ember-data/attr'; 

export default Model.extend({ 
    fname: attr(), 
    lname: attr(), 
    phone: attr() 
}); 

私の主なテンプレート/コンポーネント/ユーザーlist.hbsはちょうどこのようになります。

<table class="with-detail"><tr> 
     <td class="table-overview"> 
      <table class="user-table"> 
       {{#each users as |user|}} 
       <tr> 
        <td>{{user.id}} </td> 
        <td>{{user.fname}}</td> 
        <td>{{user.lname}}</td> 
       </tr> 
       {{/each}} 
      </table> 
     </td> 
     <td class="table-detail"> 
      <!-- Show all data of user X --> 
      <!--{{user-detail}}--> 

     </td> 
    </tr> 
</table> 

マイテンプレート/コンポーネント/ユーザーdetail.hbs(私は詳細のラベルを見ることができるので、私はテンプレートを呼んでいる: - 右側の詳細は)データを持たないにもかかわらず、左側のテーブルしかし、データなし):

First name: {{user.fname}} //these don't work of course 
Last name: {{user.lname}} 
Phone: {{user.phone}} 

これは私がrouter.jsでやろうとしていたものです:

Router.map(function() { 
    this.route('users', { 
     path: 'users', 
    }); 
    this.route('user', { 
     path: 'user/:id' 
    }); 
}); 

とのために良い措置、さらにいくつかのルートがあります。 ルート/ users.js

import Ember from 'ember'; 
export default Ember.Route.extend({ 
    model() { 
     return this.store.findAll('user'); 
    } 
}); 

ルート/ user.jsの

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
     return this.store.query('user', { id: 1 });  
    } 
}); 

(と、なぜこれほど多くのルートファイル?)

私がuser/1に直接ぶつかったら、何も見ません。テーブルもディテールもありません。おそらく/ usersとそのモデルがなくなったからでしょう。

私は一種の困惑です。

+0

私は、ユーザーの詳細を表示すると、すべてのユーザーのテーブルを表示する必要があることを認識しています。したがって、テーブルデータが利用できないため、パスメソッド(/ user/1)を使用しないでください。私は私の最初の質問に答えると思う:私はパスを経由せずに、javascript経由で、内部的にユーザー(私はすでに)の詳細を提供する必要があります。 – DaveC426913

+0

ember-twiddleを提供できますか?あなたのリストルートの下にあなたの詳細ルートを入れ子にするべきだと思います。 – Lux

+0

詳細ルートを使用する必要があります。 Emberが 'users'ルートのデータを処理する方法は、ネストされた詳細ルートをレンダリングする前に取得されます。 –

答えて

0

あなたの質問は少し一般的ですから、私はこのSOの別の質問に対してこの解決策を作成しましたが、私はあなたが望んでいると信じているものの良いデモンストレーションとして役立ちます。

このtwiddleをご覧になり、これが念頭に置いたものかどうかをお知らせください。

このアプリのために、対応するルーティング構造は

Router.map(function() { 
    this.route('games', function(){ 
    this.route('game', { path: '/game/:language_id' }, function(){ 
     this.route('comments') 
    })   
    }) 

だからあなたは左側にロードされたコメントが1、右のそれの詳細を、クリック上のゲームのリストが表示されますです。

+0

私はあなたのつぶやきに従ってきました。今では私のテンプレートは見えますが、データはありません。私はGitHubに投稿します。 – DaveC426913

+0

これは私のベアボーンプロジェクトで、マスターディテールビューを使用しています。テンプレートは表示されますが、データは表示されません。うまくいけば、それはマイナーなものです。 https://github.com/DavesBrain/Orbcare-test – DaveC426913

+0

ああ。モデルアトリビュートを少し手抜きして、データを見ることができました!ありがとうございました! – DaveC426913

関連する問題