Sammy.js + Mustache 在简单示例中给出错误: haystack.indexOf 不是函数
大家好,提前感谢您抽出时间。
我正在尝试 Sammy.js + Mustache 。因此,我创建了一个 HTML 文件,其中包含应有的所有内容:
<html>
<head>
<script type="text/javascript" src="jquery-1.6.3.js"></script>
<script type="text/javascript" src="sammy.js"></script>
<script type="text/javascript" src="mustache.js"></script>
<script type="text/javascript" src="sammy.mustache.js"></script>
<script type="text/javascript" src="application.js"></script>
</head>
<body>
<div id="main">
</div>
</body>
</html>
我从他们的 github 站点获取了 sammy 和 Mustache 文件。
在 application.js
中,只有:
$(function() {
var app = $.sammy('#main', function() {
this.use('Mustache','ms');
var search = {};
this.get('#search', function() {
var ctx = this;
ctx.load('data/server.json')
.then(function(server) {
ctx.render('searchForm.ms', server);
});
});
});
app.run();
});
searchForm.ms
是一个非常简单的 Mustache 模板。
它正确加载 json,然后加载模板,但它收到一个 Document 实例。它将这个 Document 实例传递给 Mustache,而 Mustache 需要一个 String,因此它会失败并显示 haystack.indexOf is not a function
因为 haystack 是一个 Document,而不是一个字符串。
我还尝试将 searchForm.m
s 更改为 searchForm.txt
并得到相同的错误。我使用的是最新版本的 Firefox,处理 file://
url。
然而,这个例子是如此简单,不应该失败;我哪里错了?
Hi all and thanks in advance for taking the time.
I'm experimenting with Sammy.js + Mustache . So, I have created an HTML file that includes everything that should be there:
<html>
<head>
<script type="text/javascript" src="jquery-1.6.3.js"></script>
<script type="text/javascript" src="sammy.js"></script>
<script type="text/javascript" src="mustache.js"></script>
<script type="text/javascript" src="sammy.mustache.js"></script>
<script type="text/javascript" src="application.js"></script>
</head>
<body>
<div id="main">
</div>
</body>
</html>
I've taken sammy and mustache files from their github sites.
In application.js
there is simply :
$(function() {
var app = $.sammy('#main', function() {
this.use('Mustache','ms');
var search = {};
this.get('#search', function() {
var ctx = this;
ctx.load('data/server.json')
.then(function(server) {
ctx.render('searchForm.ms', server);
});
});
});
app.run();
});
searchForm.ms
is a very simple Mustache template.
It loads the json correctly, then loads the template, but it receives a Document instance. It passes this Document instance to Mustache which instead expects a String, so it fails with haystack.indexOf is not a function
because haystack is a Document, not a string.
I also tried changing searchForm.m
s to searchForm.txt
and got the same error. I'm on a recent version of Firefox, working on file://
urls.
However, this example is so simple it should not fail; where am I wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它似乎与最新的 jQuery 版本(1.6+)及其浏览器实现有关。我正在使用最新版本的 chrome 浏览器(14.0.8....),由于某种原因,加载模板时的成功回调返回一个 Document 对象,而 Sammy 框架的逻辑需要一个字符串。在 jQuery 1.4.2 版本中,此调用返回的类型在同一浏览器版本中为 string 类型。
第 1499 行发现了问题
浏览堆栈时,我在 Sammy.js: Fixing it Replaceing null for 'text'
我不确定此更改是否正确。但我希望这些信息有用
It seems it is related with lastest jQuery versions (1.6+) and it's browser implementation. I am using lastest version of chrome browser (14.0.8....) and for some reason the success callback while loading template is returning an Document object while the logic for the Sammy framework expects a string. In version 1.4.2 of jQuery the type returned by this call is of type string in the same browser version.
Walking through the stack I found the issue at line 1499 in Sammy.js:
Fixing it replacing null for 'text'
I am not sure if this change is correct. But I hope this info can be useful
您的模板未正确加载,或者其他库正在传递对象而不是字符串。
导致同样的错误。
Your template is not loading properly, or the other library is passing an object instead of a string.
Causes same error.