我的两条路线有相同的模板和控制器,所以我的路线想要使用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路由网址使用product
模板和控制器
我正在使用{{partial}}
,就像:http://emberjs.jsbin.com/bifanateku/1/edit?html,js,console
这可行,但我想如果我可以使用renderTemplate
,代码会更清晰。
也许有更好的方法来解决这个问题?
答案 0 :(得分:1)
对于查询参数,控制器和路径应该一起工作。
在您的情况下,您正在使用order
路由,该路由需要来自您没有的order
控制器的查询参数。
所以你要么为路线定义一个不同的控制器,e。克。
contollerName: 'product',
或将查询参数定义移动到order
控制器并将它们绑定到product
控制器的属性。
这是一个毛茸茸的设置,我相信你可能首先doing something wrong。
你不应该使用控制器。使用组件。
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>