【问题标题】:Ember: Exchanging the model within an action-handlerEmber:在动作处理程序中交换模型
【发布时间】:2016-02-21 03:55:47
【问题描述】:

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

我想要一个产品搜索路径,模型在其中保存项目。当用户单击设置条件并单击搜索时,此项目集可能会更改。我有一个组件,每次用户填写表单并按下“搜索”按钮时都会发送一个动作。路由处理中的动作

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

如果我这样做,异常将接近。我也担心即使没有例外,这也行不通,因为我猜模板不会自行更新。

但是: 如何通过路由中的操作设置(/完全交换)模型?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    我能想到几个方法:

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

    【讨论】:

    • 两者都是的方式!我个人使用查询参数,这真的很有趣,但是在控制器上设置model 一点也不坏!做它,玩得开心!控制器可能会走一条路,目前没有理由避免它们!您也可以过渡到新模型...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多