javascript - EmberJS - 将项目重构为组件会停止查询参数和操作触发

标签 javascript ember.js

目前,我的应用程序中有一个小型报告生成器,可以更新 URL 中的查询参数。查询参数用于定义后端查询中的条件并返回所需的报告。

我正在尝试将其重构为一个组件,以便它可以在应用程序的其他部分中使用。

这是报告生成器:

<div class="container" style="margin-top:100px">

  <div class="panel panel-info">
    <div class="panel-heading">
      <h3 class="panel-title">Report Builder</h3>
    </div>
    <div class="panel-body">
      <form class="form-horizontal" method="get" {{action "submitQuery" dateFrom dateTo unitNumber on="submit"}}>
        <div class="form-group">

          <div class="col-sm-3"><label>Module:</label>
            {{#select-box/native value=sb on-select=(action 'selected') class="form-control" as |sb| }}
              {{sb.option value='Select a Module:'}} {{sb.option value='Option 1 List'}} {{sb.option value="Option 2 List" }} {{sb.option value="Option 3 List" }} {{sb.option value="Option 4 List" }}
            {{/select-box/native}}
          </div>

          <div class="col-sm-3"><label>Date From:</label>{{pikaday-input locale=en value=dateFrom  format='DD/MM/YYYY' class="form-control" name="dateFrom" onSelection=(action 'onChangeDateFrom') }}</div>
          <div class="col-sm-3"><label>Date From:</label>{{pikaday-input value=dateTo  format='DD/MM/YYYY' class="form-control" name="dateTo" onSelection=(action 'onChangeDateTo') }}</div>
          <div class="col-sm-3"><label>Unit Number:</label>{{input type="text" value=unitNumber class="form-control" name="unitNumber" }}</div>
          <div class="col-lg-10 col-lg-offset-5" style="margin-top:15px">
            <button type="reset" class="btn btn-default">Reset</button>
            <button type="submit" class="btn btn-info">Submit</button>
          </div>
        </div>
      </form>
    </div>
  </div>
</div>

以下是用于设置查询的查询参数并随后将用户带到正确页面的操作。此代码位于 reports.hbs 模板的 Controller 上:

import Controller from '@ember/controller';

export default Controller.extend({

  queryParams: ['dateFrom', 'dateTo', 'unitNumber'],
  dateFrom: null,
  dateTo: null,
  unitNumber: null,

  actions: {
    selected(x) {
      module = x
    },

    onChangeDateFrom(selectedValue) {
      this.set('dateFrom', moment(selectedValue).format('DD-MM-YYYY'))

    },

    onChangeDateTo(selectedValue) {
      this.set('dateTo', moment(selectedValue).format('DD-MM-YYYY'))

    },

    submitQuery(dateFrom, dateTo, unitNumber) {
      switch (module) {
        case 'Option 1 List':
          this.transitionToRoute('option1list', {
            queryParams: {
              dateFrom: this.get('dateFrom'),
              dateTo: this.get('dateTo'),
              unitNumber: this.get('unitNumber')
            }
          })
          break;
        case 'Option 2 List':
          this.transitionToRoute('opton2list', {
            queryParams: {
              dateFrom: this.get('dateFrom'),
              dateTo: this.get('dateTo'),
              unitNumber: this.get('unitNumber')
            }
          })
          break;
        case 'Option 3 List':
          this.transitionToRoute('option3list', {
            queryParams: {
              dateFrom: this.get('dateFrom'),
              dateTo: this.get('dateTo'),
              unitNumber: this.get('unitNumber')
            }
          })
          break;
        case 'Option 4 List':
          this.transitionToRoute('opton4list', {
            queryParams: {
              dateFrom: this.get('dateFrom'),
              dateTo: this.get('dateTo'),
              unitNumber: this.get('unitNumber')
            }
          })
          break;
        case 'Select a Module:':
          alert('Please select a Module')
          break;
        default:
          console.log('error')
      }
    }
  }
});

当我创建一个组件(报告生成器)并放入 HTML 时,字段和操作不再起作用。尝试将操作复制到report-builder.js 中也不起作用

transitionToRoute 也不能在组件中使用。我尝试将操作分离到组件的 JS 文件中,并转换到名为 report-builder 的 Controller 中,但这没有产生任何结果。

我是 Ember 和软件开发的新手,非常感谢任何建议。

最佳答案

您需要将所有操作从 Controller 传递到组件。

在reports.js Controller 文件中,

actions:{
  submitQuery(){
    //subit query code
  }
}

在reports.hbs文件中,

{{report-builder submitQuery=(action 'submitQuery') }}

在report-builder.hbs文件中,

<button type="submit" class="btn btn-info" {{action submitQuery}}>Submit</button>

点击提交按钮将触发 Controller 中的方法submitQuery

您可以阅读更多信息triggering-changes-with-actions

关于javascript - EmberJS - 将项目重构为组件会停止查询参数和操作触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47574601/

相关文章:

javascript - 过渡不适用于 translate3d

javascript - Chrome 失败的图像背景卡住问题

javascript - Ember.js 中的数组操作

javascript - 计算属性应该放在哪里?

javascript - 嵌套数组以在搜索中查询过滤器的参数

javascript - 我如何在此处正确格式化或访问 JSON?

javascript - 将提示响应存储在 localStorage 中并检索

javascript - scrollIntoView() 在控制台中有效,但在站点代码中无效

node.js - 将 Emberjs 与 Nodejs 集成

ember.js - 如何在 ember 2.x 中通过 Controller 操作以编程方式添加组件