Emberjs控制器目标指向错误的路线

时间:2014-10-15 19:53:57

标签: javascript ember.js ember-router

我有学生路线,并为该路线创建了学生控制器。在路线中我有一个动作,我尝试使用 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;
&#13;
&#13;

2 个答案:

答案 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;}} ,并调用了正确的路线。

&#13;
&#13;
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;
&#13;
&#13;