Map base fields to item-specific fields in Item#fromJSON()

This commit is contained in:
Simon Kornblith 2015-06-03 23:42:08 -04:00
parent 87db29f060
commit 7253a2dd8c
2 changed files with 16 additions and 2 deletions

View file

@ -3816,7 +3816,8 @@ Zotero.Item.prototype.fromJSON = Zotero.Promise.coroutine(function* (json) {
yield this.loadAllData(); yield this.loadAllData();
} }
this.setType(Zotero.ItemTypes.getID(json.itemType)); let itemTypeID = Zotero.ItemTypes.getID(json.itemType);
this.setType(itemTypeID);
var isValidForType = {}; var isValidForType = {};
var setFields = {}; var setFields = {};
@ -3895,8 +3896,10 @@ Zotero.Item.prototype.fromJSON = Zotero.Promise.coroutine(function* (json) {
// Item fields // Item fields
default: default:
let fieldID = Zotero.ItemFields.getID(field);
isValidForType[field] = Zotero.ItemFields.isValidForType( isValidForType[field] = Zotero.ItemFields.isValidForType(
Zotero.ItemFields.getID(field), this.itemTypeID Zotero.ItemFields.getFieldIDFromTypeAndBase(itemTypeID, fieldID) || fieldID,
this.itemTypeID
); );
if (!isValidForType[field]) { if (!isValidForType[field]) {
Zotero.logError("Discarding unknown JSON field " + field); Zotero.logError("Discarding unknown JSON field " + field);

View file

@ -739,4 +739,15 @@ describe("Zotero.Item", function () {
assert.isUndefined(json.numPages); assert.isUndefined(json.numPages);
}) })
}) })
describe("#fromJSON()", function () {
it("should map a base field to an item-specific field", function* () {
var item = new Zotero.Item("bookSection");
yield item.fromJSON({
"itemType":"bookSection",
"publicationTitle":"Publication Title"
});
assert.equal(item.getField("bookTitle"), "Publication Title");
});
});
}); });