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は実際にはarray( "attr" => "val"、...)であり、このコレクションのモデルの定義方法と正確に一致します。

問題は、元のモデルと同様のJSONオブジェクトを直接返すのではなく、名前空間(data / meta)を使用しているため、次のようにモデルでmodel.parseを使用することです。

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

問題:モデルがクライアント側で作成されません。'add'イベントは発生しません。また、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 に答える