2014-01-24 34 views
0

我正在向服務器請求用戶。只有一個用戶,這是通過HTTP傳遞的。但是,當我循環從.findAll()調用返回的行時,我會看到多個值。何時會store.findAll()返回重複值?

我的路線:

U.UsersIndexRoute = Ember.Route.extend({ 
    model: function() { 
     return { 
      users: this.store.findAll('user') 
     }; 
    }, 
    setupController: function(controller, model) { 
     controller.set('model', model.users); 
    } 
}); 

我控制器(有刪節):

U.UsersIndexController = U.ApplicationArrayController.extend({ 
    _modelChanged: function() { 
     this.get('model').then(_.bind(function(users) { 
      _.each(users.get('content'), function(user) { 

       // I should only see one name logged 
       console.log(user.get('name'), user.get('id')); 

      }); 
     }, this)); 
    }.observes('model', 'orgNameForId') 
}) 

服務器響應GET /users

{ 
    "Results": [{ 
     "id": 16, 
     "Name": "Chris" 
    }] 
} 

當這個運行時,控制檯顯示2個用戶,一個是Chris 16,另一個是Chris null

我的問題

  • 是否爲空ID的意思是在我的代碼別的東西創造的紀錄?
  • 我應該總是過濾掉沒有ID的模型嗎?
  • 幫助!
+0

您最初是否通過應用程序創建此用戶?如果是這樣,當您創建用戶時,它期望從服務器回撥一個ID。如果不是,我認爲它保留爲空。然後,當您執行GET請求時,它將獲得一個新的請求,而舊的請求仍在內存中。另外,ember-data需要從服務器返回以下格式:'{'users':[{'id':16,'Name':「Chris」}]}'我很驚訝它的工作原樣。 – EmptyArsenal

+0

是的,我完全有一個本地用戶,沒有得到正確的創建。良好的調用。此外,我有一個適配器,翻譯該響應格式。我忘了提及,當我簡化我的代碼的問題。 – cdownie

回答

0

當您在應用程序中創建一個用戶時,它希望從服務器成功回撥一個ID,如果配置正確,該ID將自動更新。如果不是,則保留爲空。當您執行GET請求時,它將添加服務器將其發送到ember-data的內容,這將是另一個模型,因爲id不匹配,所以它不會將其識別爲同一個模型。

如果你還沒有使用它,我檢查了灰燼督察Chrome的插件,它可以讓你看到的路線,數據等

正如評論所說,燼數據預計,下面的格式,但你提到的照顧,在你的適配器:

{ 'users' : [{ 
    'id': 16, 
    'Name": "Chris" }] 
} 

至於你的最後一個問題,你不應該過濾掉車型id爲null。你應該創建你的應用程序,以便沒有ID爲null的ID。