我有学生路线,并为该路线创建了学生控制器。在路线中我有一个动作,我尝试使用 this.get(' target')从路线触发,由于某些未知原因返回索引路径这是错误的路线。因此调用该操作会抛出一个错误,表示没有任何操作处理。这是jsfiddle
App = Ember.Application.create();
App.Router.map(function(){
this.route('student');
});
App.StudentRoute = Ember.Route.extend({
actions: {
callMe: function(){
alert('hello');
}
}
});
App.StudentController = Ember.ObjectController.extend({
actions: {
sendtoRoute: function(){
console.log('the route is:', this.get('target') );
}
}
});

<script type="text/x-handlebars">
{{render 'student'}}
{{outlet}}
</script>
<script type="text/x-handlebars" id='student'>
<button {{action 'sendtoRoute'}} > hit me </buton>
</script>
<script src="//code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0/handlebars.js"></script>
<script src="http://builds.emberjs.com/release/ember.js"></script>
<script src="http://builds.emberjs.com/beta/ember-data.js"></script>
&#13;
答案 0 :(得分:1)
实际上,controller.get('target')
指向您案例中的正确背景。
来自Ember的docs on Ember.Controller.target
:
也可以在实例化控制器后设置 实例在模板中使用渲染助手时,或者当a controller用作itemController。在大多数情况下,目标 属性将自动设置为操作的逻辑使用者 对于控制器。
{{render 'student'}}
创建StudentView
模板'student'并将其连接到StudentController
的新实例,然后将结果呈现给父模板(index
。 )。它不会创建/转移到StudentRoute
,因此StudentRoute
中的客户端没有IndexRoute
的有效实例。因此,StudentController.target
指向父上下文 - ApplicationController
。
答案 1 :(得分:1)
我发现了问题,原因是使用 {{render&#39; student&#39;}} 在应用模板中呈现学生模板。为了解决这个问题,我将其更改为 {{#link-to&#39; student&#39;}} ,并调用了正确的路线。
App = Ember.Application.create();
App.Router.map(function(){
this.route('student');
});
App.StudentRoute = Ember.Route.extend({
actions: {
callMe: function(){
alert('hello');
}
}
});
App.StudentController = Ember.ObjectController.extend({
actions: {
sendtoRoute: function(){
console.log('the route is:', this.get('target') );
}
}
});
&#13;
<script type="text/x-handlebars">
{{link-to 'Student' 'student'}}
{{outlet}}
</script>
<script type="text/x-handlebars" id='student'>
<button {{action 'sendtoRoute'}} > hit me </buton>
</script>
<script src="//code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0/handlebars.js"></script>
<script src="http://builds.emberjs.com/release/ember.js"></script>
<script src="http://builds.emberjs.com/beta/ember-data.js"></script>
&#13;