Javascript 余烬组件sendAction()不工作

Javascript 余烬组件sendAction()不工作,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,在过去的几个小时里,我一直在努力解决这个问题,我正在制作一个用于创建发票的余烬应用程序。我正在使用ember组件(textfield)使用键盘修改字段,但由于操作没有发送回相关控制器,因此我无法在focusOut或insertNewLine上保存记录,并且没有发生任何事情。我正在使用: Ember : 1.1.2 Ember Data : 1.0.0-beta.3 Handlebars : 1.0.0 jQuery : 1.9.1 这应该是这样的: 问题似乎在控制器或组

在过去的几个小时里,我一直在努力解决这个问题,我正在制作一个用于创建发票的余烬应用程序。我正在使用ember组件(textfield)使用键盘修改字段,但由于操作没有发送回相关控制器,因此我无法在focusOut或insertNewLine上保存记录,并且没有发生任何事情。我正在使用:

Ember      : 1.1.2 
Ember Data : 1.0.0-beta.3 
Handlebars : 1.0.0 
jQuery     : 1.9.1
这应该是这样的:

问题似乎在控制器或组件中,似乎我遗漏了什么

在组件上调用console.log函数,sendAction调用永远不起作用

谢谢你的帮助

项目路线 项目控制器 项目控制器 项目模板
在模板中定义组件时,应该定义操作将发送到的位置

{{edit-item value=desc createItem='someactionoutside'}}
在这种情况下,操作在不同的位置有不同的名称(因为这是一个组件,它在不同的位置可能有不同的含义)。它还可以避免冲突动作/触发动作。考虑一个组件有两个实例,每个实例都应该在控制器中触发不同的操作

{{edit-item value=desc createItem='createUser'}}
{{edit-item value=desc createItem='createShoppingCart'}}
在你的情况下,你可以直接写

{{edit-item value=desc createItem='createItem'}}
在您的组件中,您可以调用

this.sendAction('createItem', param1, param2, ....);
如果您不关心它像组件一样是自包含的,那么您可能只想使用视图而不是组件。你可以把它注册为助手,它看起来也一样漂亮

Em.Handlebars.helper('edit-item', Em.View.extend({
  templateName: 'some_template',

  actions: function(){
   // etc etc
  } 

})); 

{{edit-item}}

除了@Kingpin2k给出的漂亮答案之外,如果动作名称始终相同,并且希望简化包含组件的语法,那么还可以在组件中定义动作名称。即

import Ember from 'ember';
export default Ember.Component.extend(SchoolPlayerProspectMixin, {

    //Here we define an attribute for a string that will always be the same
    transitionToRoute: "transitionToRoute",

    somethingChanged: function(){
        console.log( "OMG something changed, lets look at a post about it!" );

        //Here we are passing our constant-attribute to the sendAction.
        self.sendAction('transitionToRoute', "post.show", post );

    }.observes('changableThing'),
});

在此示例中,组件使用父控制器TransitionRoute方法更改路由,即使组件可能不是按钮/链接。例如,在包含多个选定输入的组件更改上导航,或者只是在组件内更改路线。

多谢大家,这解决了我的问题,我理解了这背后的概念(组件是自包含的),但在我的情况下,这会引入代码重复。如果您不关心自我约束,视图可能会更容易。另外请注意,模板中的引号非常重要。
{{edit-item value=desc createItem='someactionoutside'}}
{{edit-item value=desc createItem='createUser'}}
{{edit-item value=desc createItem='createShoppingCart'}}
{{edit-item value=desc createItem='createItem'}}
this.sendAction('createItem', param1, param2, ....);
Em.Handlebars.helper('edit-item', Em.View.extend({
  templateName: 'some_template',

  actions: function(){
   // etc etc
  } 

})); 

{{edit-item}}
import Ember from 'ember';
export default Ember.Component.extend(SchoolPlayerProspectMixin, {

    //Here we define an attribute for a string that will always be the same
    transitionToRoute: "transitionToRoute",

    somethingChanged: function(){
        console.log( "OMG something changed, lets look at a post about it!" );

        //Here we are passing our constant-attribute to the sendAction.
        self.sendAction('transitionToRoute', "post.show", post );

    }.observes('changableThing'),
});