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