我刚刚从其他人那里学到了写一个助手来替换不同模板中的<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
的元素。
我仍然无法理解为什么,希望有人能给出解释。
答案 0 :(得分:2)
说白了,将DOM操作代码放在Handlebars帮助器中是一个糟糕的主意。把手助手不是为了调用随机函数,而是为了将数据插入到DOM中。你甚至在技术上都不知道如何或何时调用该方法,因为它是一个实现细节(这可能就是为什么你的代码没有按照你期望的方式工作的原因)。
如果您想更改文档标题,我建议使用this之类的内容。 document.title集成到Ember中有a pull request,但尚未合并。