首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >icanhaz.js模板的输出是[对象数组],而不是呈现的模板

icanhaz.js模板的输出是[对象数组],而不是呈现的模板
EN

Stack Overflow用户
提问于 2011-07-13 10:38:27
回答 2查看 2K关注 0票数 1

我使用的是Zepto.js、ICanHaz.js和Backbone.js。我有几个模板,我正在尝试呈现。在呈现模板并将结果插入页面后,我看到的唯一输出是对象数组或对象HTMLTableElement。

这是backbone.js路由器

代码语言:javascript
复制
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");
            }
         });
    }
}); 

第一个模板是静态的,没有插入任何数据。以下是代码

代码语言:javascript
复制
SignInForm = Backbone.View.extend({
    render: function() {
        this.el = ich.sign_in_form({});
        return this.el;
    }
});

另一个模板稍微复杂一些。

代码语言:javascript
复制
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;
    }
});

实际的模板并不是很复杂。第一个是一个简单的登录表单。下一个是一张表。

这是第一个模板。

代码语言:javascript
复制
<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>

这是第二个模板。

代码语言:javascript
复制
<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上。我尝试使用render方法从警告this.el,但仍然收到相同的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-14 09:28:45

我发现了问题所在。默认情况下,ICanHaz.js会返回一个jQuery或Zepto对象。(我期望的是一个字符串。)您可以向ich.template函数添加第二个参数来触发原始字符串输出。返回Zepto对象不是问题,除了在Zepto中,$.html()不接受Zepto对象。可以选择让ICanHaz.js输出原始字符串,或者使用接受Zepto对象的Zepto方法之一(append、prepend、after、after)。

要将数组呈现为字符串,只需使用:ich.myRenderFunction(myObject, true);

票数 3
EN

Stack Overflow用户

发布于 2011-07-13 10:46:22

当模板没有被正确解析时,这种情况就会发生:通常是实际模板中的错误。验证模板数据是否没有问题以及是否已正确加载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6673485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档