Ember.js 链接到的页面完全刷新

Ember.js 链接到的页面完全刷新,ember.js,ember-data,ember-cli,Ember.js,Ember Data,Ember Cli,各位。在将Ember从2.9.1更新到2.10之后,我有一个奇怪的行为。在这个更新之后,当我使用linktohelper导航列表链接时,我得到了一个完整的页面刷新,而不是粒子刷新。在余烬2.9.1中,这是粒子刷新。也许我在这些更新中遗漏了什么 这是我的清单代码 app/router.js import Ember from 'ember'; import config from './config/environment'; const Router = Ember.Router.extend

各位。在将Ember从2.9.1更新到2.10之后,我有一个奇怪的行为。在这个更新之后,当我使用linktohelper导航列表链接时,我得到了一个完整的页面刷新,而不是粒子刷新。在余烬2.9.1中,这是粒子刷新。也许我在这些更新中遗漏了什么

这是我的清单代码

app/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' });
});
controllers/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
});
routes/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
    });

  },
// ....
模板/组件/侧栏-list-item.hbs

{{#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}}
{{{{}链接到“list”list.id(查询参数page=1存档=false)}{{list.name}{{{{if-activeleadscont}}({{activeleadscont}}}{{/if}{{/link to}}

谢谢您的帮助。

我想指出我在发布的代码中发现的问题

1.在列表路由模型钩子中,您正试图使用
peekAll
peekRecord
从存储中加载
list
模型,我还没有找到要加载
list
模型的代码

不执行
findAll('list')
如果执行
peekAll
peekRecord
您将一无所获,因为
peekAll
peekRecord
都将返回存储中已加载的内容,而不会从服务器获取

因此,您需要将
列表
模型记录加载到
存储
。为此,您可以在
beforeModel
hook中执行此操作,也可以在父路由的任何一个路径中执行此操作

beforeModel(transition){
 this._super(...arguments);
 return this.store.findAll('list');
}
2.对于
链接到
帮助程序,如果我们提供动态段值(在您的案例中为
list.id
),则它将始终调用
前模型
模型
后模型
挂钩


3.如果您不想选择完全转换,也可以设置
{refreshModel:false}
对不起,伙计们。我发现它不是完全刷新。我有application-loading.hbs和loading circle。它只在应用程序启动时出现,但在修复后,它会在我刷新列表模型时随时出现。
无论如何,谢谢你的帮助

这似乎很正常。您的意思是,每当您将queryParams中的参数更改为refreshModel时。尝试删除属性refreshModel,看看它是否符合您的要求。我已尝试设置{refreshModel:true},但没有任何更改。这很奇怪,因为在2.9.1上,一切都按预期进行。“一旦进入文章路由,对controller:articles上的category属性的任何更改都将导致URL更新查询参数。默认情况下,查询参数属性的更改不会导致完整的路由器转换(即,它不会调用model hook和setupController等);它将只更新URL。从1开始。在routes/application.js中,有一个model(){if(this.get('session.isAuthenticated'){return Ember.RSVP.hash({user:this.store.find('user',this.get('session.data.authenticated.userId')),}列表:this.store.findAll('list');},所以peekAll一切都正常。2.我需要一个呼叫模型,所以我已经通过了。3.我试着将它设置为{refreshModel:false},但无论如何都是完全刷新。。