2017-01-03 2 views
0

все. У меня странное поведение после обновления Ember от 2.9.1 до 2.10. После этого обновления, когда я перемещаюсь по ссылкам «Список» с помощью «link-to helper», у меня есть полное обновление страницы вместо обновления частиц. В Ember 2.9.1 это было обновление частиц. Возможно, я пропустил что-то в этих обновлениях.Страница полностью обновлена ​​по ссылке-

Вот мой код Список

приложение/router.js

import Ember from 'ember'; 
import config from './config/environment'; 

const Router = Ember.Router.extend({ 
    location: 'auto', 
    rootURL: '/app/' 
}); 


Router.map(function() { 
    this.route('home', { path: '/' }); 
    this.route('list', { path: '/list/:listId' }, function() { 
     this.route('lead', { path: 'lead/:leadId', resetNamespace: true }); 
    }); 
    this.route('pageNotFound', { path: '/page-not-found' }); 
}); 

Контроллеры/list.js

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    queryParams: ['page', 'sortBy', 'direction', 'archived'], 
    page: 1, 
    perPage: 50, 
    sortBy: 'createdAt', 
    direction: 'asc', 
    archived: false 
}); 

маршруты/list.js

import Ember from 'ember'; 
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; 
import RouteMixin from 'ember-cli-pagination/remote/route-mixin'; 

export default Ember.Route.extend(AuthenticatedRouteMixin, RouteMixin, { 

    queryParams: { 
    page: {refreshModel: true}, 
    perPage: {refreshModel: true}, 
    sortBy: {refreshModel: true}, 
    direction: {refreshModel: true}, 
    archived: {refreshModel: true} 
    }, 

    intercom: Ember.inject.service('intercom'), 

    leadLink: 'lead', 

    model(params) 
    { 
    var intercom = this.get('intercom'); 
    var store = this.get('store'); 
    var list; 

    params.leadLink = this.leadLink; 

    if (params.listId) { 
     list = this.store.findRecord('list', params.listId).then(function (list) { 

     intercom.update({ 
      "Emails": list.get('user.discovered_emails'), 
      "Limit": list.get('user.max_discovered_emails') 
     }); 

     return list; 
     }); 
    } 
    else { 
     params.title = 'All leads'; 
    } 

    return Ember.RSVP.hash({ 
     list: list, 
     leads: this.store.query('lead', { 
     filter: this.getFilter(params) 
     }, { reload: true }).then(function (leads) { 
     params.total = leads.get('meta.total'); 
     leads.forEach(function (lead) { 
      var list = store.peekRecord('list', lead.get('listId')); 
      lead.set('list', list); 
      return lead; 
     }); 
     return leads; 
     }), 
     lists: this.store.peekAll('list'), 
     params: params 
    }); 

    }, 
// .... 

шаблоны/компоненты/боковая панель-список-item.hb с

{{#link-to "list" list.id (query-params page=1 archived=false)}}<i class="icon-list-unordered"></i> {{list.name}} <span class="text-muted text-thin">{{#if activeLeadsCount}}({{activeLeadsCount}}){{/if}}</span>{{/link-to}} 

Спасибо за любую помощь.

+0

Это кажется нормальным. Вы говорите, что всякий раз, когда вы изменяете параметры в queryParams для refreshModel. Попробуйте удалить атрибут refreshModel и посмотреть, делает ли он то, что вы хотели. – mk2

+0

Я попытался установить {refreshModel: true}, но ничего не изменилось. Это странно, потому что на 2.9.1 все работает так, как ожидалось. – Dmytro

+0

«Внутри маршрута статей любые изменения в свойстве категории на контроллере: статьи заставят URL-адрес обновить параметр запроса. По умолчанию изменение свойства запроса не приведет к полному переходу маршрутизатора (т. Е. Он не будет call model hooks и setupController и т. д.), он будет обновлять URL только ". от https://guides.emberjs.com/v2.10.0/routing/query-params/ – mk2

ответ

0

Извините, ребята. Я обнаружил, что это не полное обновление. У меня есть application-loading.hbs с кругом загрузки. И он появляется только при загрузке приложения, но после исправления https://github.com/emberjs/ember.js/pull/14545 он появляется в любое время, когда я обновляю модель списка. В любом случае спасибо за помощь!

0

Я хотел бы отметить вопросы, которые я нашел в размещенном коде,

1.Inside маршрутного списка модель крючок, вы пытаетесь загрузить list модели из магазина с помощью peekAll и peekRecord, и я не нашел код для загрузки list модель для хранения.

Не делая findAll('list') если вы peekAll или peekRecord вы не получите ничего, так как peekAll или peekRecord как будет возвращать все, что уже загружен в магазине он не будет получать его от сервера.

Поэтому вам необходимо загрузить list записей модели в store. Для этого вы можете сделать это в beforeModel крючке, или вы можете сделать это любым из родительского маршрута

beforeModel(transition){ 
this._super(...arguments); 
return this.store.findAll('list'); 
} 

2.Для link-to хелперов, если обеспечить динамическое значение сегмента (в вашем случае list.id), то он всегда будет вызывать beforeModel, model и afterModel крюк.

3.Also установить {refreshModel: false}, если вы не хотите, чтобы выбрать в полный переход

+0

1. В маршрутах/приложении.JS А имеет модели() { если (this.get ('session.isAuthenticated')) { возвращения Ember.RSVP.hash ({ пользователя: this.store.find ('пользователь', this.get ('session.data.authenticated.userId')), : this.store.findAll ('list') }); } }, Так что все в порядке с peekAll. 2. Мне нужна модель вызова, поэтому я прошел ее. 3. Я попытался установить его {refreshModel: false}, но в любом случае это было полное обновление .. – Dmytro