未定義でない場合、すべての属性を backbone.js Model オブジェクトから別のオブジェクトにコピーしたいと考えています。これは、親の属性をオーバーライドする子に少し似ています。プロセス全体から除外する必要がある子オブジェクトの属性がいくつかあります。これは私がこれまでに持っているものです:
function inherit(parent, child) {
var childAttributes = Object.keys(child.attributes);
// Don't involve these attributes in any way, they're special.
attributes = _.without(attributes, ['specialCase1', 'specialCase2', 'specialCase3']);
// This array will store undefined child attributes
var undefChildAttributes = new Array();
for (i in attributes) {
var attr = attributes[i]; // Get attribute name
var value = child.get(attr); // ... and value
var type = RealTypeOf(value); // ... and type
if (type == 'undefined') {
undefChildAttributes.push(attr);
}
}
// Update the child attributes array to not include undefined any attributes
attributes = _.without(attributes, undefChildAttributes);
// Copy any attributes from child to parent
// ------------------ PROBLEM AREA ------------------
for (var m=0; m<attributes.length; m++) {
var attr = attributes[m]; // Attribute to copy
// I want to use _.extends in some way here, maybe like:
_.extends(parent, child[attr]);
}
}
属性を親にコピーする方法に行き詰まっています。私がatmを持っている唯一の方法はハックです:
if (type == 'string') {
eval('var o = {' + attr + ':"' + child.get(attr) + '"};');
} else {
eval('var o = {' + attr + ':' + child.get(attr) + '};');
}
parent.set(o);