jQuery不适用于自定义ember的handlebars帮助器

时间:2014-04-05 12:33:10

标签: jquery ember.js handlebars.js

我刚刚从其他人那里学到了写一个助手来替换不同模板中的<title>,然后我尝试编写一个这样的测试示例:

Ember.Handlebars.helper('headTitle', function (title) {
  Ember.$('head').find('title').text(title);
});

但这根本不起作用。我还尝试使用console.log(Ember.$('head').find('title'))查看它是否真的选择了<title>标记,但事实并非如此。真正奇怪的事情接下来发生:加载所有代码后,我在浏览器的控制台中输入Ember.$('head').find('title'),现在它找到了标记!

为什么jQuery在Handlebars助手中不起作用?

我把测试代码放在jsfiddle中,请帮我解决这个问题,谢谢。

http://jsfiddle.net/nightire/8arRv/1/

更新:

对不起伙计们,我终于让它工作了(按照我的预期改变了<title>内容),在我使用与初始值相同的值之前,所以我看不出它们之间的区别。

您可以在http://jsfiddle.net/nightire/8arRv/2/

查看工作代码

但是在这段经历中,我还发现如果我为另一个预先存在的元素更改选择器,它就不像上面那样工作了。要查看这种奇怪的行为,请查看此版本:http://jsfiddle.net/nightire/8arRv/3/

我唯一改变的是辅助函数中的选择器,而不是查找<title>现在我想找到一个ID为#title的元素。

我仍然无法理解为什么,希望有人能给出解释。

1 个答案:

答案 0 :(得分:2)

说白了,将DOM操作代码放在Handlebars帮助器中是一个糟糕的主意。把手助手不是为了调用随机函数,而是为了将数据插入到DOM中。你甚至在技术上都不知道如何或何时调用该方法,因为它是一个实现细节(这可能就是为什么你的代码没有按照你期望的方式工作的原因)。

如果您想更改文档标题,我建议使用this之类的内容。 document.title集成到Ember中有a pull request,但尚未合并。