2016-04-11 1 views
0

私は、サーバーから受け取ったJSONを使用して作成された不変な人のリストを持っています。私は今、AJAXリクエストを送信することで、1人を更新します。サーバーからの応答により、更新された人物が返されます。どのように更新された人と不変のリストを更新するのですか?私の試みでは、単純に誤った結果をもたらすインデックスでリスト要素を置き換えます。私はそれを人のIDで置き換えて欲しい。Immutable.jsでリストをidでマージするには?

var Immutable = require('immutable'); 

// Get me all my people 
var peopleResponse = [ 
    { username: 'jsmith', title: 'Manager', dept: 'Engineering', salary: 100000 }, 
    { username: 'lwhite', title: 'Manager', dept: 'Sales',  salary: 90000 } 
]; 

// Convert to immutable structures 
var people = Immutable.fromJS(peopleResponse); 
console.log(people); 

// Change lwhite's salary to 100,000 
var updateResponse = 
    { username: 'lwhite', title: 'Manager', dept: 'Sales',  salary: 100000 } 

var updatedPeople = [ Immutable.fromJS(updateResponse) ]; 

people = people.merge(updatedPeople); 
console.log(people); 

出力:更新リストは2 lwhite秒を持っていることを

List [ Map { "username": "jsmith", "title": "Manager", "dept": "Engineering", "salary": 100000 }, Map { "username": "lwhite", "title": "Manager", "dept": "Sales", "salary": 90000 } ] 
List [ Map { "username": "lwhite", "title": "Manager", "dept": "Sales", "salary": 100000 }, Map { "username": "lwhite", "title": "Manager", "dept": "Sales", "salary": 90000 } ] 

注意!

+0

*は、どのように私は申し訳ありません*。更新者との不変のリストを更新するのですが、どのように不変のリストを更新することができますか? – smnbbrv

+0

明確にするために、私は文字通り意味しませんでした。私が意味したのは、更新された人と新しいリストを得ることでした。 – Naresh

答えて

0

私は最終的に次の解決策を考え出しました。それはnormalizrに触発されています。基本的な考え方は、人々のリストは単純にユーザー名の配列であるということです。実際の人物オブジェクトは、ユーザー名をキーにした地図に座っています。

var Immutable = require('immutable'); 

// Get me all my people 
var peopleResponse = { 
    result: ['jsmith', 'lwhite'], 
    entities: { 
     people: { 
      jsmith: { username: 'jsmith', title: 'Manager', dept: 'Engineering', salary: 100000 }, 
      lwhite: { username: 'lwhite', title: 'Manager', dept: 'Sales',  salary: 90000 } 
     } 
    } 
}; 

// Convert to immutable structures 
var people = Immutable.fromJS(peopleResponse.result); 
var peopleByUsername = Immutable.fromJS(peopleResponse.entities.people); 
console.log(people); 
console.log(peopleByUsername); 

// Change lwhite's salary to 100,000 
var updateResponse = { 
    lwhite: { username: 'lwhite', title: 'Manager', dept: 'Sales',  salary: 100000 } 
}; 

var updatedPeopleByUsername = Immutable.fromJS(updateResponse); 

peopleByUsername = peopleByUsername.merge(updatedPeopleByUsername); 

console.log(people); 
console.log(peopleByUsername); 
関連する問題