2016-02-21 37 views
0

如何在路線上更改模型的數據,作爲對按鈕等用戶交互的反應?Ember:在動作處理程序內交換模型

我想要一個產品搜索路線,其中模型包含項目。當用戶點擊設置條件並點擊搜索時,此項目設置可能會更改。我有一個組件,每次用戶填寫表單並按下「搜索」按鈕時都會發送一個動作。該路由處理動作

//rounte.js 
action: { 
    searchClicked: { 
    var newdata = this.get('store').query('item', {...}); 
    this.set('model', newdata); //<<<< this is not working!! 
    } 
} 

如果即時通訊,異常將接近。我也擔心,即使沒有例外,這也不行,因爲模板不會自我更新。

但是: 如何設置(/完全交換)路線中的動作模型?

回答

3

我能想到的幾種方法:

1)使用查詢參數和動力路線刷新模型標準發生變化時。更多可以在這裏找到:https://guides.emberjs.com/v2.3.0/routing/query-params/,特別是Opting into a full transition。但是,如果您有多個標準,這可能並不適合您的需求。

2)將模型設置爲控制器而不是路徑。

actions: { 
    searchClicked() { 
    let promise = this.get('store').query('item', {...}); 
    promise.then(newData => { 
     this.controller.set('model', newdata); 
    });  
    } 
} 

但隨着控制器在未來的餘燼迭代中消失,我不知道這是否是最好的解決方案。

+0

都是**好**的方式!我個人使用查詢參數,這真的很有趣,但只是在控制器上設置'模型'根本不是一個壞主意!做到這一點,玩得開心!那些控制器可能會採用某種方式,目前沒有理由避開它們!您也可以轉換到新模型中... – Lux

相關問題