如何更改路线上模型的数据作为对用户交互的反应,例如按下按钮?
我希望有一个productsearch-route,其中模型包含项目。当用户点击设置条件并点击搜索时,此项目设置可能会更改。我有一个组件,每当用户填写表单并按下按钮时发送一个动作"搜索"。该路线处理
中的操作//rounte.js
action: {
searchClicked: {
var newdata = this.get('store').query('item', {...});
this.set('model', newdata); //<<<< this is not working!!
}
}
如果我这样做,异常即将来临。即使没有例外,因为模板不会自我更新,我也担心这不会起作用。
然而: 如何从路径中的操作设置(/完全交换)模型?
答案 0 :(得分: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);
});
}
}
但是在未来的ember迭代中控制器会消失,我也不知道这是否是最佳解决方案。