3

大家好,提前感谢您抽出宝贵的时间。

我正在试验 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 需要一个字符串,所以它失败了,haystack.indexOf is not a function因为 haystack 是一个文档,而不是一个字符串。

我也尝试将searchForm.ms 更改为searchForm.txt并得到相同的错误。我正在使用最新版本的 Firefox,正在处理file://url。

然而,这个例子非常简单,它不应该失败;我哪里错了?

4

2 回答 2

2

它似乎与最新的 jQuery 版本(1.6+)和它的浏览器实现有关。我正在使用最新版本的 chrome 浏览器(14.0.8 ....),由于某种原因,加载模板时的成功回调正在返回一个 Document 对象,而 Sammy 框架的逻辑需要一个字符串。在 jQuery 1.4.2 版本中,此调用返回的类型在同一浏览器版本中是字符串类型。

遍历堆栈,我在 Sammy.js 的第 1499 行发现了问题:

dataType: is_json ? 'json' : null,

修复它替换'text'的null

dataType: is_json ? 'json' : 'text',

我不确定此更改是否正确。但我希望这些信息有用

于 2011-10-26T22:53:34.763 回答
1

您的模板未正确加载,或者其他库正在传递对象而不是字符串。

Mustache.to_html({}, {}, {} );

导致同样的错误。

于 2011-09-14T19:50:04.640 回答