Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 烬:修改路线中的模型_Ember.js - Fatal编程技术网

Ember.js 烬:修改路线中的模型

Ember.js 烬:修改路线中的模型,ember.js,Ember.js,我正在开发一个余烬应用程序,我遇到了一些问题。我必须在应用程序的某个点筛选结果,比如在控制器或视图中,如下所示: 在view.hbs,我正在{{if test.passed}}消除通过的测试…: 现在我需要在路由级别进行筛选。管线中的模型是不能编辑的,如果可以,那么它必须是路径,这是我不想要的。我怎样才能做到这一点?如何使模型可编辑?目前,我可以访问路线模型,但它无法编辑。下面是我从view.hbs文件与模型对话的方式,它是有效的 {{#each model as |test|}}<br&

我正在开发一个余烬应用程序,我遇到了一些问题。我必须在应用程序的某个点筛选结果,比如在控制器或视图中,如下所示:

在view.hbs,我正在{{if test.passed}}消除通过的测试…:

现在我需要在路由级别进行筛选。管线中的模型是不能编辑的,如果可以,那么它必须是路径,这是我不想要的。我怎样才能做到这一点?如何使模型可编辑?目前,我可以访问路线模型,但它无法编辑。下面是我从view.hbs文件与模型对话的方式,它是有效的

{{#each model as |test|}}<br>
    {{test.name}}
{{/each}}
如何将参数传递给模型并对其进行编辑,以使UI也发生更改


这是我需要修改的模型。目前返回有效,但不可修改。

这只是一个猜测,因为我不能100%确定您想要实现什么

我不知道这个参数是从哪里来的,但我假设有一个查询参数,比如yourroute?name=TestName。使用此选项,您可以访问该参数,如下所示:

export default Route.extend({
  // if you leave that out, it'll work for the first entry, but the model will not update if you transitionToRoute with only the queryParams changed)
  queryParams: {
    category: {
      refreshModel: true
    }
  },

  model(params) {
    // params has format of { name: "TestName" }
    return this.get('store').query('test', params);

    // you can of course put more complex logic in here, as you had it in controller
    // f.e.: 
    // return this.get('store').query('test', {name: params.name, passed: true});
    // or check first if you have a param at all...
  }
}

注: 无法在控制器上设置参数以更改模型。我已经试过了…分别地。 要更改它,您必须在模板中执行{{link To routeName query params name=newName}}或TransitionRoute{queryParams:{name:'anotherName'};在你的控制器里


旁注:无论如何,将filterByTest作为一个操作是很奇怪的。这应该是一个计算属性。

这只是一个猜测,因为我不能100%确定您想要实现什么

我不知道这个参数是从哪里来的,但我假设有一个查询参数,比如yourroute?name=TestName。使用此选项,您可以访问该参数,如下所示:

export default Route.extend({
  // if you leave that out, it'll work for the first entry, but the model will not update if you transitionToRoute with only the queryParams changed)
  queryParams: {
    category: {
      refreshModel: true
    }
  },

  model(params) {
    // params has format of { name: "TestName" }
    return this.get('store').query('test', params);

    // you can of course put more complex logic in here, as you had it in controller
    // f.e.: 
    // return this.get('store').query('test', {name: params.name, passed: true});
    // or check first if you have a param at all...
  }
}

注: 无法在控制器上设置参数以更改模型。我已经试过了…分别地。 要更改它,您必须在模板中执行{{link To routeName query params name=newName}}或TransitionRoute{queryParams:{name:'anotherName'};在你的控制器里


旁注:无论如何,将filterByTest作为一个操作是很奇怪的。这应该是一个计算属性。

如果我的理解与@Jeff相同,那么您希望根据用户通过按钮或某种方式选择的选项查询后端。在这方面,最好从国家的角度考虑。控制器将具有一个表示要表示的过滤器视图的状态,并且模型挂钩将使用该状态了解如何查询要显示的特定模型集

下面是一个演示如何使用ember cli mirage实现这一点的工作流程:

重点是我的路线定义了一个queryParams对象,该对象与@Jeff的答案相同,它指示路线在每次控制器上的category属性更改时刷新其模型

queryParams: {
  category: { refreshModel: true }
},
在模型钩子中,我使用params.category值来构造正确的查询负载

model(params) {
  if (params.category === 'all') {
    return this.store.findAll('test');
  }
  let passed = params.category === 'passed';
  return this.store.query('test', { 'filter[passed]': passed });
}
最后,我确保我的控制器知道类别是从URL驱动的:

queryParams: ['category'],
// A default is required to train ember on how to serialize
// the value in the URL
category: 'all',
现在,您可以更改类别值,整个路线将自动刷新,或者您可以使用指向帮助者的链接


如果我的理解与@Jeff相同,那么您希望根据用户通过按钮或某种方式选择的选项查询后端。在这方面,最好从国家的角度考虑。控制器将具有一个表示要表示的过滤器视图的状态,并且模型挂钩将使用该状态了解如何查询要显示的特定模型集

下面是一个演示如何使用ember cli mirage实现这一点的工作流程:

重点是我的路线定义了一个queryParams对象,该对象与@Jeff的答案相同,它指示路线在每次控制器上的category属性更改时刷新其模型

queryParams: {
  category: { refreshModel: true }
},
在模型钩子中,我使用params.category值来构造正确的查询负载

model(params) {
  if (params.category === 'all') {
    return this.store.findAll('test');
  }
  let passed = params.category === 'passed';
  return this.store.query('test', { 'filter[passed]': passed });
}
最后,我确保我的控制器知道类别是从URL驱动的:

queryParams: ['category'],
// A default is required to train ember on how to serialize
// the value in the URL
category: 'all',
现在,您可以更改类别值,整个路线将自动刷新,或者您可以使用指向帮助者的链接


Hi@AmazingDayTodayHi@AmazingDayToday查询中有参数的子路由如何?当您通过控制器执行此操作时,param从何而来?你的路线上还没有那个param吗?嗨,杰夫,谢谢你看。我没有route->model中的参数。如何将参数发送到那里,以及如何通过过滤数据来修改模型?查询中包含参数的子路由如何?当您通过控制器执行此操作时,param从何而来?你的路线上还没有那个param吗?嗨,杰夫,谢谢你看。我没有route->model中的参数。如何将参数发送到那里,以及如何通过过滤数据来修改模型?通过向控制器添加queryParams:['category'],该控制器上的任何设置也将导致触发路由上的refreshModel queryParams:['category']对于控制器,该控制器上的任何设置也将导致触发路由上的refreshModel。