Sammy.js + Mustache 在简单示例中给出错误: haystack.indexOf 不是函数

发布于 2024-12-04 08:27:37 字数 1590 浏览 1 评论 0原文

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

我正在尝试 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.ms 更改为 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.ms 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凉栀 2024-12-11 08:27:37

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

第 1499 行发现了问题

dataType: is_json ? 'json' : null,

浏览堆栈时,我在 Sammy.js: Fixing it Replaceing null for 'text'

dataType: is_json ? 'json' : '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:

dataType: is_json ? 'json' : null,

Fixing it replacing null for 'text'

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

I am not sure if this change is correct. But I hope this info can be useful

撞了怀 2024-12-11 08:27:37

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

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

导致同样的错误。

Your template is not loading properly, or the other library is passing an object instead of a string.

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

Causes same error.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文