Ember:动态创建组件动作don'不要开火
Ember: Dynamically created component actions don't fire
当Ember(1.11.0)组件被动态添加到页面时,没有触发该组件上的{{actions}},我遇到了问题。奇怪的是,这似乎与ember应用程序如何添加到页面有关——通过默认模板还是添加到"rootElement"。
正在工作的JSBin:动作被触发
不工作的JSBin:操作未触发
我的组件定义:
<script type="text/x-handlebars" data-template-name="components/foo-bar">
<p>Component {{name}}</p>
<button {{action "doIt"}}>Do It</button>
</script>
App.FooBarComponent = Ember.Component.extend({
click: function() {
console.log('click fired! - ' + this.get('name'));
},
actions: {
doIt: function() {
console.log('doIt fired! - ' + this.get('name'));
}
}
});
当组件被动态添加到页面时,click()事件和doIt()操作不会被触发。我正在使用append()方法将组件添加到页面中:
App.IndexController = Ember.Controller.extend({
count : 1,
actions: {
createNewFoobBar: function() {
this.set('count', this.get('count') + 1);
var comp = this.container.lookup('component:foo-bar');
comp.set('name', this.get('count'));
comp.set('controller', this);
comp.append();
}
}
});
在任何一种情况下,当组件是模板的一部分时,都会正确触发操作:
{{foo-bar name="one"}}
我发现它在以下情况下有效:
- 使用CCD_ 1代替CCD_
- 删除
comp.set('controller', this);
,否则将引发错误
工作jsbin:http://emberjs.jsbin.com/saquzupaye/edit?html,js,控制台,输出
为什么comp.append()
不工作?我们可以看到,组件被附加到body
而不是#content
,并且这种行为看起来是出乎意料的,因为rootElement: "#content"
是被定义的。
来自指南:
"…rootElement可以是DOM元素,也可以是与jQuery兼容的选择器字符串。请注意,在根元素外部附加到DOM的视图不会接收事件。如果指定自定义根元素,请确保只在其内部附加视图!"(来自事件委派指南)
"…在呈现过程结束时,根视图向RenderBuffer请求其元素。RenderBuffer获取其完整的字符串,并使用jQuery将其转换为元素。该视图将该元素分配给其元素属性,并将其放置在DOM中的正确位置(在appendTo中指定的位置,如果应用程序使用append,则为应用程序的根元素)。"(摘自UnderstandingEmber:视图图层指南)。
因此,我的观点是这是一个错误,解决方法是使用appendTo()
手动附加到根元素。
- 元素在我的代码中不会.fadeTo.Don'I don’我不知道;s错误的JavaScript、JQuery、H
- Don'不允许将焦点集中在自动完成的选择上
- javascript如果图像不存在don't加载它
- append元素don'不要在提交时出现
- AngularJS指令部分应用的函数don'不起作用
- Don'我不明白为什么我的setInterval+jQuery;不起作用
- 我没有'I don’我不理解for在循环中的用途
- 点击不'似乎没有开火
- jQuery 1.7.2:.on()在一个页面上工作;Don’别再干别的了
- AngularJs|Don'在成功加载所有指令htmls之前,不显示页面
- Codeacademy Javascript..好的!/输出正确,但codeacademy没有;I don’我不喜欢
- Don't工作警报代码jQuery
- 如何实施“;Don'不要再给我看了”;在GWT中
- AngularJS routeprovider赢得'Don’我什么都不做
- Mediawiki皮肤创建-Javascript don'Don’t get load
- Dropit下拉列表没有'Don’不要躲在老鼠屋
- 强制 $scope.$watch 只开火一次
- 链接don'由于Javascript悬停效果,无法在移动设备上工作
- Jquery点击事件don'我不想开火
- Ember:动态创建组件动作don'不要开火