0

我终于放弃了。我一直在努力让这个工作,但没有运气。我只是有一个这样的 collection.create 调用:

                    var createData = {
                        full_name : full_name,
                        email : email,
                        role_id : role_id
                    };

                    var that = this;
                    app.collections.teamMembers.create(createData,{
                        wait: true,
                        success : function(){
                            log("in success")
                        },
                        error : function(a,b,c){
                            log("in error")
                        }
                    })

服务器是 PHP,它返回的结果如下:

header('Content-type: application/json');
    echo json_encode(array(
        "data" => $data,
        "meta" => $meta
    ));

在上面, $data 实际上是数组(“attr”=>“val”,...),它与该集合的模型的定义方式完全匹配。

问题是,由于我没有直接返回类似于原始模型的 JSON 对象,而是使用命名空间(数据/元),因此我在模型上使用 model.parse,如下所示:

parse : function(response){
        log(response, "inside model parse, this is the response from server")
        return response.data;
    },

ISSUE: 模型没有在客户端创建。不会触发“添加”事件。我也在使用 wait:true 选项。

但是,如果出现以下情况,模型会在本地创建: - 我不使用 wait:true - 我使用 wait true 但从服务器返回准确的 JSON 模型,没有名称间距。

我想使用 wait:true 以及命名空间。请帮忙 :(

4

1 回答 1

0

最后我能够修复它,我在我的引导程序中覆盖主干集合和模型以具有我无论如何都不会使用的加载状态。所以我注释掉了整个代码。现在它工作正常。这是我注释掉的引导程序中的代码:

// OVERRIDINGS AND SETTINGS
    //----------------------

    // Adding close method to all views
    Backbone.View.prototype.close = function() {
        if (this.onClose) {
            this.onClose();
        }
        _.each(this.childViews, function(childView){ 
            childView.close();
            delete childView;
        })
        this.remove();
        this.unbind();
    };

    // Adding loading state to every model and collection
    Backbone.Collection.prototype.loading = false;
    Backbone.Model.prototype.isLoading = false;

    // Set isLoading to true when fetch starts
    var oldFetch = Backbone.Collection.prototype.fetch;
    Backbone.Collection.prototype.fetch = function(options) {
        this.isLoading = true;
        oldFetch.call(this, options);
    }
    Backbone.Model.prototype.fetch = function(options) {
        this.isLoading = true;
        oldFetch.call(this, options);
    }

    // Turn off isLoading when reset
    Backbone.Collection.prototype.on('reset', function(){
        this.isLoading = false;
    })
    Backbone.Model.prototype.on('reset', function(){
        this.isLoading = false;
    })
于 2012-11-20T15:58:57.833 回答