刚刚跟别人学了写一个helper来代替<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
的元素.
我还是不明白为什么,希望有人能给出解释。
最佳答案
简单地说,将 DOM 操作代码放入 Handlebars 助手中是一个糟糕的主意。 Handlebars 助手并不是为了调用随机函数,而是为了将数据插入到 DOM 中。从技术上讲,您甚至不知道如何或何时调用该方法,因为它是一个实现细节(这可能就是您的代码无法按您期望的方式工作的原因)。
如果您想更改文档标题,我建议类似 this 。有a pull request用于将 document.title 集成到 Ember,但尚未合并。
关于jQuery 无法在自定义 ember 的 Handlebars 助手中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22880946/