【问题标题】:Emberjs 1.0.0-RC3: Can't use send to call controller method from viewEmberjs 1.0.0-RC3:不能使用发送从视图调用控制器方法
【发布时间】:2013-05-28 01:13:56
【问题描述】:

通常,我们可以使用以下方法从视图访问控制器中声明的方法:this.get('controller').send('method');。在这个简单的jsfiddle 中,失败并显示:Uncaught TypeError: Cannot read property 'send' of undefined。

这是jsfiddle中的完整代码。

 App = Ember.Application.create();

 App.YesController = Ember.ArrayController.extend({

   cow: function(){
       console.log('say mooooo') ;
    }  
 });

 App.YesView = Ember.View.extend({
    templateName: 'yes',
   um:  function(){    
     this.get('controller').send('cow');
   }
});

整个视图:

<script type='text/x-handlebars' data-template-name='application'>
  {{render yes}}
  {{outlet}}
</script>

<script type='text/x-handlebars' data-template-name='yes'>
   <h1> Can't use send to call controller method from view</h1>
    <button {{action 'um' target='view.content'}}> can't call controller from view</button>

  <button {{action 'cow'}}> controller action works</button>
</script>

【问题讨论】:

    标签: ember.js handlebars.js


    【解决方案1】:

    据我所知,可以像这样在控制器中调用 cow() 方法:

    App.YesView = Ember.View.extend({
      templateName: 'yes',
      um: function() {
        this.get('controller').cow();
        //this.controller.cow() // <-- this should work also
      }
    })
    

    【讨论】:

    • Heron 感谢您的建议,但任何一种方法都只在使用 **target=view 时有效。所以我赞成您的回答并接受了 Martin 的。
    【解决方案2】:

    尝试target=view 而不是target=view.content,否则您会尝试在模型上调用发送,这是未定义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      相关资源
      最近更新 更多