Зачем этот уголек?сбой приложения js в Firefox?


У меня есть очень простой Уголек.JS приложение, которое работает правильно в IE и Chrome, но не работает в Firefox (9.0.1 и 10.0). А почему бы и нет? Вот код:

<!doctype html>

<html>
<head>
    <title>Template Name</title>
</head>
<body>
    <script type="text/x-handlebars" data-template-name="my-template">
        {{App.user.name}}
    </script>

    <div id="container"></div>

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript" src="http://cloud.github.com/downloads/emberjs/ember.js/ember-0.9.4.js"></script>

    <script type="text/javascript">
        window.App = Ember.Application.create();

        App.user = Ember.Object.create({
            name: 'John'
        });

        App.view = Ember.View.create({
            templateName: 'my-template'
        });

        App.view.appendTo('#container');
    </script>
</body>
</html>
3 13

3 ответа:

Ошибка в firefox -

uncaught exception: Error: <Ember.View:ember143> - Unable to find template "my-template".

Это, по-видимому, указывает на то, что сценарий шаблона не был оценен в точке, где выполняется приложение. Решение состоит в том, чтобы дождаться onload. Оберните ваш appendTo Вот так:

$(function() {
    App.view.appendTo('#container');
});

Я только что испытал точно такую же проблему. Я выяснил, что это было вызвано тем, что Эмбер зависела от руля. Похоже, что после версии 1.0 они удалили включение исходного кода Handlebars. После добавления в библиотеку Handlebars ошибка исчезает.

Ember.Application.create({ 
    ready: function() { 
        App.view.appendTo('#container');
    }
});

У Тома Уотмора есть правильный ответ на это в комментариях.

Сообщение об ошибке отображается в консоли JavaScript, только если вы используете unminified версии Эмбера.js

Проблема в том, что шаблон не был оценен ember, потому что ваш код выполняется, как только браузер попадает в него, а не после того, как приложение ember было полностью создано.