2015-10-06 90 views
1

我知道控制器現在在Ember中已棄用,但我想知道如何使用舊版本的ember來實現此目的。如何在更新商店時更新模型數據emberjs

我有一個路線定義如下:

Ember.Route.extend({ 
    model : function(params) { 
     return Ember.RSVP.hash({ 
      posts : store.find('post', {date : params.date, page : params.page}) 
     }); 
    }, 
    setupController : function(controller, model) { 
     this.set('model', model.posts); 
    } 
}); 

一切工作正常並且數據被加載。現在我決定從控制器動態加載數據。因此,在相應的控制器,我做了如下:

Ember.ArrayController.extend({ 
    Ember.RSVP.hash({ 
      posts : store.find('post', {date : params.date, page : params.page}) 
    }).then(function(data) { 
     this.store.pushPayLoad(this.store.modelFor('post'), data); 
    }.bind(this)); 
}); 

以上述方式,我能得到的灰燼存儲加載的數據,但它不加載到模型中。推薦的方式是什麼,以便在商店中有數據時立即更新模型。

+0

不建議使用陣列控制器。 –

+0

我的不好。但目前我堅持使用舊版本的餘燼:( –

回答

1

只是爲了澄清:爲什麼你想把東西移到控制器?

看來,最簡單的方式去了解這一切將是擺脫掉這一切ArrayController代碼,以及在路由setupController方法,只是設置模型如下:

Ember.Route.extend({ 
    model : function(params) { 
     return this.store.find('post', {date : params.date, page : params.page}); 

    } 
}); 

這是Ember首選(和預期)的方法,用參數獲取模型。

爲了更加簡化的東西,並假設您的PARAMS的格式如下:

{ 
    date: SOME_DATE, 
    page: SOME_PAGE 
} 

然後,所有你需要做的是:

Ember.Route.extend({ 
    model : function(params) { 
     return this.store.find('post', params); 
    } 
}); 

這會發現所有的職位與給定的參數相關聯,然後將它們分配給模型,然後在模板中以{{model}}的形式提供,在控制器中以this.get('model');的形式提供。

+1

非常感謝你,你的確幫助我理解了一些細微差別,而且,如果商店得到更新,我希望模型得到更新。基本上在控制器中,並相應地使用this.store.pushPayload()來更新帖子。我不得不在每次我做這個懶加載時明確地設置控制器中的模型嗎? –

+1

,但你根本不需要重新定義模型 我可以說的是,你應該檢查[我對這個問題的回答](http://stackoverflow.com/a/32997926/1431452)有關如何在商店更新時保持模型更新的更多信息。 – joshfarrant