ошибка при создании представления в backbone.js - PullRequest
1 голос
/ 16 мая 2011

Здесь я хочу сделать представление в backbone.js

// The DOM element for a User item...
    var UserView = Backbone.View.extend({
        //... is a list tag.
        tagName:  "li",
         // Cache the template function for a single item.
        template: _.template($('#tmpl_occupant').html()),

        // a one-to-one correspondence between a **User** and a **UserView** in this
        // app, we set a direct reference on the model for convenience.
        initialize: function() {

            _.bindAll(this, 'render', 'close');
            this.model.bind('change', this.render);
            this.model.view = this;
        },
        // Re-render the contents of the User item.
        render: function() {
            $(this.el).html(this.template(this.model.toJSON()));
            return this;
        }
    });

Этот код представления я помещаю в user.js, и когда загружается index.html, он вызывается и выдает ошибку

str is null
http://myserver/rahul/js/underscore-1.1.3.js
Line 675

Я думаю, что это связано с тем, что ошибка не возникает, когда я удаляю эту строку

  template: _.template($('#tmpl_occupant').html()),


<script type="text/html" id="tmpl_occupant">
    <%=user.username%> is in <%=gib.name%> (<%=channel%>)
    </script>

Я думаю, это потому, что index.html не полностью загружен во время выполнения этой строки.tmpl_occupant, что я могу сделать, чтобы решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 16 мая 2011

Что я могу сделать, чтобы решить эту проблему?

Во-первых, вы можете переместить скрипт инициализации в конец HTML-документа. Это гарантирует, что он будет запущен после загрузки всего HTML.

В противном случае вы можете заключить код инициализации в блок $(document).ready(), что обеспечит полную загрузку документа и доступность HTML. Мой код выглядит примерно так:

ApplicationController = Backbone.Controller.extend({
    /* router code here */
});

$(document).ready(function() {
    myapp = new ApplicationController()
});

При этом используется событие готовности DOM jQuery, чтобы убедиться, что все готово, перед запуском первой строки клиентского кода.

0 голосов
/ 16 мая 2011

Сделано, передавая непосредственно строку вместо ссылки jquery.или

http://documentcloud.github.com/underscore/#template, и лучшим решением является компиляция шаблона и передача шаблона в экземпляр view.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...