2015-02-20 2 views
8

Я новичок в immutable.js, и я хотел бы лучше понять, как использовать записи, начиная с исходного объекта JS.Как создать карту записей из исходного объекта javascript с помощью Immutable.js?

С Immutable.fromJS() я могу создать карту проходящее сырой объект, например:

var images = { 
    "1": { 
    id: "1", 
    urls: ["/medium/1.jpg", "/large/1.jpg"] 
    }, 
    "2": { 
    id: "2", 
    urls: ["/medium/1.jpg", "/large/1.jpg"] 
    } 
    } 

var imagesMap = Immutable.fromJS(images); 

imagesMap теперь карта, содержащая другие карты, по одному для каждого изображения.

Я хотел бы вместо того, чтобы создать карту, содержащую записи, например, с помощью Image записи определяется как:

var ImageRecord = Immutable.Record({ id: undefined, urls: undefined }) 

Как я могу иметь imagesMap как карты ImageRecord с? Есть ли что-то, что я могу сделать, чтобы сделать reviver до fromJS, или мне нужно пойти с «старым» подходом?

// old approach 
var imagesMap = Immutable.Map() 
for (key in images) { 
    imagesMap.set(key, new ImageRecord(images[key])) 
} 

ответ

16

Immutable.fromJS имеет необязательный второй параметр reviver, который можно использовать. Вам просто нужно решить, какие части объекта js вы хотите превратить в записи.

var images = { 
    "1": { 
    id: "1", 
    urls: ["/medium/1.jpg", "/large/1.jpg"] 
    }, 
    "2": { 
    id: "2", 
    urls: ["/medium/1.jpg", "/large/1.jpg"] 
    } 
    }; 

var ImageRecord = Immutable.Record({ id: "0", urls: [] }) 

var imagesMap = Immutable.fromJS(images, function(key, value) { 
    // This check should be replaced by a better way to know that 
    // we really want image records 
    if(/^[0-9]+$/.test(key)) { 
    return new ImageRecord(value) 
    } 
    return value 
}); 

// Verify that it's really a record 
console.log(imagesMap.get("2").toJS()) 
console.log(imagesMap.get("2").delete("urls").toJS()) 

http://jsbin.com/ronomibano/4/edit

+2

Спасибо, я также нашел в документации, что Восстановитель 'key' пустая строка для топ-объектов, что делает еще проще, чтобы проверить, если значение должно стать записью. – gpbl

 Смежные вопросы

  • Нет связанных вопросов^_^