2012-11-19 34 views
0

我終於放棄了。我一直努力讓這個工作,但沒有運氣。我只是有一個collection.create調用是這樣的:Backbone 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 
    )); 

在上面,在$數據實際上是數組(」 attr「=>」val「,...),這與該集合的模型如何定義完全匹配。

的問題是,因爲我並沒有直接返回一個JSON對象,類似於原來的模式,但使用命名空間(數據/元),我用model.parse在模型上是這樣的:

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

問題:該模型不會在客戶端上創建。沒有'添加'事件被激發。我也在使用wait:true選項。

然而,該模型得到的地方,如果創建: - 我不用等待:真實 - 我用等待真正但是從服務器返回確切的JSON模式,沒有名字的間距。

我想要使用wait:true和namespacing。請幫助:(

+0

此外,服務器的響應後,它進入成功回調 –

+0

我沒有默認的散列模型,是必要的嗎? –

+0

更新:我注意到的另一件事是.create方法確實返回一個有效的模型(我通過將它保存到窗口然後使用控制檯我讀取它的值來測試它)然而,新模型仍然沒有被插入!奇怪! –

回答

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; 
    })