Выходной файл шаблона icanhaz.js - [объектный массив] вместо отображаемого шаблона. - PullRequest
1 голос
/ 13 июля 2011

Я использую Zepto.js, ICanHaz.js и Backbone.js.У меня есть несколько шаблонов, которые я пытаюсь сделать.После рендеринга шаблона и вставки результата на страницу я вижу только вывод [object Array] или [object HTMLTableElement].

Вот маршрутизатор backbone.js

InspectionsRouter = Backbone.Router.extend({
    routes: {
        "signin": "signin",
        "orders": "orders"
    },
    signin: function() {
        var signinForm = new SignInForm();
        $('div#content').html(signinForm.render());
    },
    orders: function() {
        InspectionsApp.active_orders = new Orders();
        InspectionsApp.active_orders.fetch({
            success: function() {
                var order_list = new OrderList({
                    collection: InspectionsApp.active_orders
                });
                $('div#content').html(order_list.render());
            },
            error: function() {
                Dialog.error("Unable to Load Active Orders");
            }
         });
    }
}); 

Первый шаблон является статическим и не содержит никаких данных.Вот код

SignInForm = Backbone.View.extend({
    render: function() {
        this.el = ich.sign_in_form({});
        return this.el;
    }
});

Другой шаблон несколько сложнее.

var OrderList = Backbone.View.extend({
    tagName: 'table',
    id: 'order_list',
    initialize: function() {
        _.bindAll(this, 'render');
    },
    render: function() {
        var active_orders = {};
        active_orders.orders = this.collection;
        $(this.el).html(ich.order_list(active_orders));
        return this.el;
    }
});

Реальные шаблоны не очень сложны.Первый простой знак в форме.Следующая таблица.

Вот первый шаблон.

<script id="sign_in_form" type="text/html">
    <h2 class="page_title">Sign In</h2>
    <form action="action/login.php" method="post" id="frm_login" name="frm_login">
         <fieldset id="credentials">
             <ol>
                 <li class="login">
                     <label for="email">E-mail Address</label>
                     <input type="email" name="email" id="email" tabindex="1" required>
                 </li>
                 <li class="login">
                     <label for="password">Password</label>
                     <input type="password" name="password" id="password" tabindex="2" required>
                 </li>
            </ol>
        </fieldset>
        <button class="button" id="btn_sign_in" type="submit" tabindex="3"><img src="icons/door_in.png">Sign In</button>
     </form>    
</script>

Вот второй шаблон.

<script id="order_list" type="text/html">
    <thead>
        <tr>
            <th>Name</th>
            <th>E-mail</th>
            <th>Status</th>
            <th>Created</th>
            <th>Assigned To</th>
        </tr>
    </thead>
    <tbody id="order_list_body">
        {{#orders}}
            <tr>
                <td>{{last_name}}, {{first_name}}</td>
                <td>{{email}}</td>
                <td>{{status}}</td>
                <td>{{created_at}}</td>
                <td>{{assigned_to}}</td>
            </tr>
        {{/orders}}
    </tbody>
</script>

Любая помощь приветствуется.Кажется, проблема в ICanHaz или в Backbone.Я попытался оповестить this.el от метода рендеринга и все еще получаю ту же проблему.

Ответы [ 2 ]

3 голосов
/ 14 июля 2011

Я разобрался в проблеме.ICanHaz.js по умолчанию возвращает объект jQuery или Zepto.(Я ожидал строку.) Вы можете добавить второй параметр в функцию ich.template для запуска вывода необработанной строки.Возврат объекта Zepto не будет проблемой, за исключением того, что в Zepto $ .html () не принимает объект Zepto.Возможны варианты вывода ICanHaz.js необработанной строки или использования одного из методов Zepto, которые принимают объект Zepto (добавление, предварительное добавление, до, после).

Чтобы отобразить массив в строку,просто используйте: ich.myRenderFunction(myObject, true);

0 голосов
/ 13 июля 2011

Это происходит со мной, когда шаблон не был правильно проанализирован: как правило, ошибка в реальном шаблоне.Убедитесь в отсутствии проблем с данными шаблона и их правильной загрузкой.

...