2017-05-26 60 views
1

在ember.js中,您如何動態更新查詢參數?動態更新查詢參數

export default Ember.Controller.extend({ 
    myQuery: "test", 

    queryParams: ["myQuery"], 

    actions: { 
     click() { 
      this.set("myQuery", "update query param"); 
     } 
    } 
}); 


export default Ember.Route.extend({ 
    queryParams: { 
    myQuery: { refreshModel: true } 
    }, 
    model(params) { 
    console.log(params) 
    } 
}); 

當動作被觸發時,應該再次調用模型鉤子,除非我錯了嗎?

Please find an example here,導航到/test路線並單擊按鈕。在控制檯內部,你可以看到模型鉤子不再被觸發。

回答

3

您的問題是與你不使用action幫手傳遞行動my-button組件並從test.hbs內通過像click=actions.click行動的事實有關。當你這樣做; this Emberjs沒有正確設置click函數運行的上下文。那就是如果你調試你的代碼,你會看到;這個環境在你的旋轉當中click裏面的動作test.js控制器實際上是設置爲my-button組件。這意味着您只需設置my-button組件的myQuery屬性;它對控制器的myQuery屬性沒有任何影響;因此控制器的屬性不會更新,因此即使您將其聲明爲refreshModel: true,模型掛鉤也不會再次運行。

你能做什麼?只需使用action幫手,一切都會正常工作。只需檢查以下twiddle。網址將被更新,並且模型鉤子將按照您的意願執行。請記住, action幫手對設置正確的this上下文至關重要,即使它看起來像正常的函數傳遞和調用。