手柄模板中的动作未触发

时间:2012-02-28 09:31:39

标签: javascript javascript-events ember.js handlebars.js

我有以下简单的代码:

(JSFiddle)http://jsfiddle.net/aR2UX/3/

无论我做什么,模板中的操作都不会触发。我很怀疑这是由于视图呈现的方式,但无论我读什么,我都无法绕过它。

我仍在尝试理解余烬视图,但从我读过的内容中我的代码应该可以工作。但似乎没有人可以帮助我吗?

(这是在rails 3.2 app中,使用ember-rails,ember 0.9.4和把手模板gem,btw)。

我非常感谢任何帮助,因为我为这个项目带来了一点ember风险。

2 个答案:

答案 0 :(得分:9)

这不符合OP的原始问题,但它符合标题,如果您遇到此问题,则搜索引擎会指向此页面。以下是可能无法触发操作的一个可能原因:标记可能不在Ember应用程序的rootElement中。所以如果你有JS

FooApp = Ember.Application.create({
  rootElement:"#foo",
  test: function() {
    alert("testing");
  }
});

和把手

<div id="foo"></div>
<a {{action "test" target="FooApp"}}>Fail</a>

然后什么都不会发生。让我困惑了几个小时。

答案 1 :(得分:3)

由于把手模板没有名称,因此它们会在声明它们的位置插入到DOM中 - 这就是您看到任何内容的原因。

此:

{{#each content}}
{{view Skills.RecommendedSkillView skillBinding="this"}}
{{/each}}

由于此时未定义content且手柄模板未与视图相关联,因此不会为您做任何事情。

同样地:

Skills.RecommendedSkillsListView = Ember.View.extend({
    templateName: 'app/templates/recommended_skills_list',

由于templateName指向不存在的手柄模板,并且视图类从未实例化(否则您将收到缺少模板的警告),因此无法帮助您。

此外:

<td><a href="#" {{action "a"}}>DO A THING</a></td>

不会再调用函数a,因为此模板只会在遇到它的DOM中插入一次,并且在该上下文中未定义askill也不是)。

最后,当您确实按照预期的方式使代码更接近工作时,默认情况下,每个手柄模板都会包含在div中。因此,每个div左右,您的表格会tr。通过更改tagNamehttp://emberjs.com/#toc_36

来解决此问题