Ember:在动作处理程序

时间:2016-02-21 03:55:48

标签: ember.js

如何更改路线上模型的数据作为对用户交互的反应,例如按下按钮?

我希望有一个productsearch-route,其中模型包含项目。当用户点击设置条件并点击搜索时,此项目设置可能会更改。我有一个组件,每当用户填写表单并按下按钮时发送一个动作"搜索"。该路线处理

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

如果我这样做,异常即将来临。即使没有例外,因为模板不会自我更新,我也担心这不会起作用。

然而: 如何从路径中的操作设置(/完全交换)模型?

1 个答案:

答案 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迭代中控制器会消失,我也不知道这是否是最佳解决方案。