JavaScript中这种情况的首选模式是什么?

时间:2013-01-10 16:32:29

标签: javascript backbone.js

在风格上,我不确定在JavaScript中处理这种情况的最佳方法。

我们从这里开始获取先前模型的副本(如果可用)。然后,我正在创建一个damageDiagnosisModel,如果它们可用,则创建值。

this._previousModel = this.impairmentsCollection.get(this.model.get('id')) || '';

选项1:

this._impairmentDiagnosisModel = new ImpairmentDiagnosisModel({
    id: this.model.get('id'),
    cdx: (this._previousModel && this._previousModel.get('diagnosis').cdx) || _.first(this._diagnosisClass).id,
    nonKeyFactor: this._previousModel && this._previousModel.get('diagnosis').nonKeyFactor,
    impairmentValue: this._previousModel && this._previousModel.get('diagnosis').impairmentValue,
    side: this._previousModel && this._previousModel.get('diagnosis').side,
    digit: this._previousModel && this._previousModel.get('diagnosis').digit
});

选项2:

if(this._previousModel) {
    this._impairmentDiagnosisModel = new ImpairmentDiagnosisModel({
        id: this.model.get('id'),
        cdx: this._previousModel.get('diagnosis').cdx,
        nonKeyFactor: this._previousModel.get('diagnosis').nonKeyFactor,
        impairmentValue: this._previousModel.get('diagnosis').impairmentValue,
        side: this._previousModel.get('diagnosis').side,
        digit: this._previousModel.get('diagnosis').digit
    });
}
else {
    this._impairmentDiagnosisModel = new ImpairmentDiagnosisModel({
        id: this.model.get('id'),
        cdx: _.first(this._diagnosisClass).id
    });
}

使用选项#1,它会使用不必要的空属性来填充模型,但这在这里并不重要。如果服务器收到空属性,则忽略它们。

使用选项#2,它是更多的代码,更容易阅读,但似乎效率低下。

在这种情况下,首选方法是什么?

1 个答案:

答案 0 :(得分:2)

选项3:您可以克隆您的_previousModel.get('diagnosis')对象,然后对其进行修改以添加自定义属性。

例如,

var data = (this._previousModel) ? _.clone(this._previousModel.get('diagnosis')) : {};
data.id = this.model.get('id');
data.cdx = data.cdx || _.first(this._diagnosisClass).id;

this._impairmentDiagnosisModel = new ImpairmentDiagnosisModel(data);
相关问题