2017-01-03 111 views
0

每個人。在Ember從2​​.9.1更新到2.10後,我有一個奇怪的行爲。在此更新之後,當我瀏覽帶鏈接助手的列表鏈接時,我得到整頁刷新而不是粒子刷新。在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 s

{{#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

「一旦進入文章路由,控制器:文章的category屬性的任何更改都會導致URL更新查詢參數。默認情況下,查詢參數屬性更改不會導致完整的路由器轉換(即不會導致完整的路由器轉換調用模型鉤子和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列表路徑模型,鉤,你正在嘗試使用peekAllpeekRecord加載從商店的list模型,我還沒有發現代碼加載list模型進行存儲。

沒有做findAll('list')如果你peekAllpeekRecord你會得到什麼,因爲peekAllpeekRecord都返回任何已加載在商店不會從服務器上獲取它。

因此,您需要將list型號記錄載入store。爲此,您可以做到這一點在beforeModel掛鉤,或者你可以做它的父路由

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

2.對於link-to幫手,如果我們提供動態段值(在你的情況list.id)中的任意一個,然後它總是會調用beforeModel,modelafterModel掛鉤。

3.Also設置{refreshModel: false},如果你不希望加入完全過渡

+0

1.在路線/應用程序。js a model(){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},但是在完全刷新中。 – Dmytro