【问题标题】:Sammy.js + Mustache gives error in simple example: haystack.indexOf is not a functionSammy.js + Mustache 在简单示例中给出错误: haystack.indexOf is not a function
【发布时间】:2011-09-13 12:29:23
【问题描述】:

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

我正在试验 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:// 网址。

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

【问题讨论】:

  • 使用 Mustache 和 jquery 得到同样的错误。你能发布 searchForm.ms 模板的内容吗?

标签: jquery mustache sammy.js


【解决方案1】:

它似乎与最新的 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',

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

【讨论】:

    【解决方案2】:

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

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

    导致同样的错误。

    【讨论】:

    • 是的,正如我所说的“因为 haystack 不是字符串,而是文档。”我解决了它修补 Sammy.Mustache 以检查它是否被视为 XMLDocument,并以防万一将其序列化为字符串。但是我一直保持开放,因为我想我(我们)做错了什么,但也许在这一点上有一个错误。
    猜你喜欢
    • 2022-08-03
    • 2015-05-04
    • 2018-07-23
    • 1970-01-01
    • 2023-02-24
    • 2021-03-07
    • 2022-01-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多