mardi 1 mars 2016

Ember JS: How to set an attribute in parent component?

My router.js:

Router.map(function() {  
    this.route('dashboard', { path: '/' });
    this.route('list', { path: '/list/:list_id' }, function() {
      this.route('prospect', { path: 'prospect/:prospect_id', resetNamespace: true });
    });
});

list.hbs:

<div class="content-wrapper">
    <div class="content">
        {{prospect-list name=model.name prospects=model.prospects openProspect="openProspect"}}
    </div>
</div>

{{outlet}}

prospect-list.hbs:

{{#each prospects as |prospect|}}
    {{prospect-item prospect=prospect openedId=openedProspectId openProspect="openProspect"}}
{{/each}}

prospect-item.hbs

<td>{{prospect.firstName}}</td>
<td>{{prospect.list.name}}</td>

components/prospect-list.js

import Ember from 'ember';

export default Ember.Component.extend({  

    openedProspectId: 0,

    actions: {
        openProspect(prospect) {
            this.set('openedProspectId', prospect.get('id'));
            this.sendAction('openProspect', prospect);  
        }               
    }    
});

components/prospect-list.js

import Ember from 'ember';

export default Ember.Component.extend({  
    tagName: 'tr',
    classNameBindings: ['isOpen:success'],

    isOpen: Ember.computed('openedId', function() {
        return this.get('openedId') == this.get('prospect').id;
    }), 

    click: function(ev) {
        var target = $(ev.target);
        if(!target.is('input'))
        {       
            this.sendAction('openProspect', this.get('prospect'));
        }
    }

});

Everything works good when I start application in browser with http://localhost:4200, but when I start from http://localhost:4200/list/27/prospect/88 currently loaded prospect (with id 88) is not highlighted in prospect list, because initial openedProspectId set 0.

How can I set openedProspectId in these case?

I can get these id in routes/prospect.js like:

import Ember from 'ember';

import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';

export default Ember.Route.extend(AuthenticatedRouteMixin, {

    model(params) {
        return this.store.findRecord('prospect', params.prospect_id);
    },

    afterModel(params) {
        console.log(params.id); 
    }
});

but how I can pass it to openedProspectId? Or should I build my application on another way?




Aucun commentaire:

Enregistrer un commentaire