大家好,并提前感谢您抽出时间。
我正在尝试使用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,后者需要一个String,因此它会失败haystack.indexOf is not a function
因为haystack是Document而不是字符串。
我也尝试将searchForm.m
更改为searchForm.txt
并得到同样的错误。我正在使用最新版本的Firefox,处理file://
网址。
然而,这个例子很简单,不应该失败;我哪里错了?
答案 0 :(得分:2)
它似乎与最新的jQuery版本(1.6+)和它的浏览器实现有关。我正在使用最新版本的chrome浏览器(14.0.8 ....),并且由于某种原因,加载模板时成功回调返回一个Document对象,而Sammy框架的逻辑需要一个字符串。在jQuery的1.4.2版本中,此调用返回的类型在同一浏览器版本中为string类型。
穿过堆栈,我在Sammy.js的第1499行找到了问题:
dataType: is_json ? 'json' : null,
修复它为'text'替换null
dataType: is_json ? 'json' : 'text',
我不确定这种改变是否正确。但我希望这些信息有用
答案 1 :(得分:1)
您的模板未正确加载,或者其他库正在传递对象而不是字符串。
Mustache.to_html({}, {}, {} );
导致同样的错误。