簡體   English   中英

如何在 Ember.js 中重新加載當前路由?

[英]How to reload current route in Ember.js?

在 Ember.js 我有 model 的路線。你能幫我嗎,當我在路線播放列表時如何重新加載這條路線(或將新數據設置為模型)由另一個 JS function 的回調調用? 我一直在尋找文檔,但對我沒有幫助。

App.PlaylistRoute = Ember.Route.extend({
 setupController: function(controller, model) {
  $.getJSON('api/playlist.php?' + Math.random().toString(36), function (data) {
   controller.set('model', data);
  });
 }
});

非常感謝!

似乎答案中的解決方案對當前路線不起作用。 我遇到了同樣的問題,並在這里嘗試了解決方案並且有效。

http://discuss.emberjs.com/t/refresh-current-view-page-after-language-change/4291/5#post_5

在你的路線。

actions: {
  sessionChanged: function() {
    this.refresh();
  }
}

並在你的控制器。

observeSession: function() {
  this.send("sessionChanged");
}.observes("session.isAuthenticated"),

從控制器使用transitionToRoute

this.transitionToRoute('playlist', newModel);

從路線使用transitionTo

this.transitionTo('playlist', newModel);

例如,假設您在控制器上有操作

App.PlaylistController = Ember.ArrayController.extend({
 actions: {
   grabNewModel: function(){
     //get some new model
     this.transitionToRoute('playlist', newModel);
   }
 }
});

有兩種方法可以做到這一點。

一個是在播放列表路由中編寫一個動作並在其中調用this.refresh()有關更多信息,您可以訪問Ember Guide 刷新路徑的方法。

另一種方法是在您的控制器中,根據您需要重新加載路線使用情況

this.get('target.target.router').refresh();

這兩個中的任何一個都可以幫助您刷新路線。

以下來自ember指南的一小部分刷新方法:

刷新此路徑和任何子路徑上的模型,以類似於從其他路徑轉換時輸入路徑的方式觸發beforeModel,model和afterModel掛鈎。 當前路由參數(例如article_id)將被傳遞到相應的模型鈎子,如果返回不同的模型,setupController和相關的路徑鈎子也將重新激活。

當搜索如何刷新當前接受的答案已過時的路線時,此答案首先出現在谷歌上。 如果您確實需要刷新路由並從 controller 中的操作再次執行 model 掛鈎操作,請使用以下命令:

在路線中

@action
refreshModel() {
  this.refresh();
}

為了在 controller 使用中調用此操作

this.send('refreshModel');

例如:

@action
performUpdate(event) {
  event.preventDefault();
  // Perform necessary action
  this.send('refreshModel');
}

注意:這會將操作發送到調用它的 controller 的相應路由,並僅更新該路由和任何子路由。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM