未捕获的ReferenceError:未定义exportid

时间:2013-11-06 16:07:04

标签: javascript backbone.js underscore.js

我创建了一个事件,以便选中多个复选框,并且如果它们是手动的,它应该将这些复选框分配给受让人,但如果它们不是,则它们应该是。这是视图函数,

assignUserClicked : function() {
    var self = this;
    var modal = new AssignmentUserModalView({
            collection: this.getSelected()
        }).open();

    this.model.save({
        integrationlevel: 'manual'
    }, {
        type: 'POST',
        wait: true

    });
    var self = this;
    var refresh = function (model) {};

    this.listenTo(modal, 'ok', function () {
        self.model.fetch({
            data: {
                exportid: self.model.id
            }
        });
    });

    modal.open();
},

,tmpl在下面,

<div class="btn-toolbar pull-right">
    <div class="btn-group" title="Bulk Actions">
    <button class="btn dropdown-toggle btn-primary" data-toggle="dropdown">
        <span class="glyphicon glyphicon-th-list"></span>
        Bulk Actions
        <span class="caret"></span>
    </button>
    <ul class="dropdown-menu">
        <h3 class="pull-left no-margin">
            <%= name %>
            <small>-
                <%= exportid %></small><% if (integrationlevel== 'manual') { %>
            <small>-</small>
            <small class="text-danger">NON CHANGEABLE</small><% } %>
            <%= exportid %>
        </h3>
        <li>
            <% if (integrationlevel == 'automatic'|| integrationlevel== 'Automatic'){ %>
            <a href="javascript:void(0);" id="ud_changetomanual" tabindex="-1">
                <span class="glyphicon glyphicon-ok"></span>
                Set to manual
            </a>
            <% } else { %>
            <a href="javascript:void(0);" id="ud_assignee" tabindex="-1">
                <span class="glyphicon glyphicon-user"></span>
                Change Assignment
            </a>
            <% } %>
        </li>
    </ul>
</div>

它给我一个错误,说导出没有定义,任何想法?

1 个答案:

答案 0 :(得分:0)

此:

self.model.fetch({
    data: {
        exportid: self.model.id
    }
});

作为AJAX请求的一部分将{exportid: self.model.id}发送到服务器,它不会将exportid作为属性添加到模型中。然后你会做这样的事情:

var t = _.template(...);
var h = t(this.model.toJSON());

exportid中没有this.model.toJSON(),因为没有人添加它;然后,模板函数会在您exportid时尝试查找<%= exportid %>但是,由于它不存在,您会得到ReferenceError

您需要将exportid放入模型的属性中,或者只放入模板数据中。我不知道在你的情况下哪种方法是合适的。


请记住_.template将模板转换为JavaScript函数,该函数使用with使其参数对象的键看起来像变量。所以当你说:

var data = this.model.toJSON();
t(data);

表示包含

的模板
<%= exportid %>

JavaScript引擎会查找data.exportid,然后,如果它在data中找不到它,它会查找名为exportid的范围内变量。第二次查找导致ReferenceError而不是nullundefined问题。