Sammy.js + Mustache выдает ошибку в простом примере: haystack.indexOf не является функцией - PullRequest
3 голосов
/ 13 сентября 2011

Привет всем и заранее спасибо, что нашли время.

Я экспериментирую с Sammy.js + Усы.Итак, я создал файл 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>

Я взял файлы sammy и усы с их сайтов github.

В 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 - это очень простой шаблон усов.

Он правильно загружает json, затем загружает шаблон, но получает экземпляр Document.Он передает этот экземпляр документа в Mustache, который вместо этого ожидает строку, поэтому он завершается с haystack.indexOf is not a function, потому что стог сена является документом, а не строкой.та же ошибка.Я использую последнюю версию Firefox, работающую на file:// urls.

Однако этот пример настолько прост, что не должен потерпеть неудачу;где я не прав?

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

Похоже, это связано с последними версиями jQuery (1.6+) и его реализацией в браузере. Я использую последнюю версию браузера Chrome (14.0.8 ....) и по какой-то причине обратный вызов при загрузке шаблона возвращает объект Document, а логика для фреймворка Sammy ожидает строку. В версии 1.4.2 jQuery тип, возвращаемый этим вызовом, имеет строку типа в той же версии браузера.

Проходя через стек, я обнаружил проблему в строке 1499 в Sammy.js:

dataType: is_json ? 'json' : null,

Исправление, заменяющее null для 'text'

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

Я не уверен, правильно ли это изменение. Но я надеюсь, что эта информация может быть полезна

1 голос
/ 14 сентября 2011

Ваш шаблон загружается неправильно, или другая библиотека передает объект вместо строки.

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

Вызывает ту же ошибку.

...