【问题标题】:If I use renderTemplate how to refresh route in ember?如果我使用 renderTemplate 如何在 ember 中刷新路由?
【发布时间】:2015-06-09 09:09:38
【问题描述】:

我的两条路线有相同的模板和控制器,所以我的路线想使用 renderTemplate 相同的模板和控制器,比如:

OrderRoute = Ember.Route.extend 
  model: (params)->  
    Product.findAll(params)

  setupController: (controller, model)->
    @controllerFor('product').set('model', model)

  renderTemplate: ->
    @render 'products',
      controller: 'products'

  actions:
    queryParamsDidChange: ->
      @refresh()

控制器:

ProductController = Ember.Controller.extend
  queryParams: ['number']

  number: null

代码看起来没有问题,但我使用时发现query params 无法工作。

jsbin:http://emberjs.jsbin.com/gegonemadu/1/edit

我无法用谷歌搜索任何关于这个问题的信息。

我知道如果我使用OrderRoute 和OrderController 路由和控制器具有相同的名称,所有的想法都会好的。但我的 2 条路线想要相同的模板,就像:

/订单
/其他
2 路由 url 使用product 模板和控制器

我用{{partial}}这个,就像:http://emberjs.jsbin.com/bifanateku/1/edit?html,js,console

这是可行的,但我认为如果我可以使用renderTemplate,代码会更干净。

也许有更好的方法来解决这个问题?

【问题讨论】:

标签: javascript ember.js


【解决方案1】:

对于查询参数,控制器和路由应该一起工作。

在您的情况下,您使用的是 order 路由,该路由需要来自您没有的 order 控制器的查询参数。

因此,您可以为路由定义不同的控制器,例如。 g.

contollerName: 'product',

或将查询参数定义移动到order 控制器并将它们绑定到product 控制器的属性。

这是一个毛茸茸的设置,我相信你可能首先是doing something wrong。

更新 1

您不应该为此使用控制器。使用组件。

Ember 正在弃用控制器并仅使用组件。但就目前而言,控制器仍然是您页面的入口点。其余的应该是组件!

你应该这样做:

App.Router.map(function() {
  this.route('foo');
  this.route('bar')
});


App.FooController = Ember.Controller.extend({
  queryParams: ['number'],
  number: null
});


App.BarController = Ember.Controller.extend({
  queryParams: ['number'],
  number: null
});
  <script type="text/x-handlebars" data-template-name="foo">
    {{x-product number=number}}
  </script>


  <script type="text/x-handlebars" data-template-name="bar">
    {{x-product number=number}}
  </script>


  <script type="text/x-handlebars" data-template-name="components/x-product">
    Search Product:
    {{input value=number}}

    <ul>
      {{#each model}}
        <li>{{this}}</li>
      {{/each}}
    </ul>
  </script>

演示:http://emberjs.jsbin.com/xixeto/1/edit?html,js,output

【讨论】:

  • 谢谢。我知道如果我将路由和控制器设置为相同的名称,一切都会好起来的。但是我想这样做,因为我的两条路由必须使用相同的模板,但路由名称不一样示例:emberjs.jsbin.com/gegonemadu/1/edit
  • 现在我明白了,也许使用组件是解决这个问题的最好方法。
  • 感谢您接受答复。也别忘了点赞!
猜你喜欢
  • 2015-04-15
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 2017-10-24
  • 2017-04-15
  • 1970-01-01
相关资源
最近更新 更多