gpt4 book ai didi

node.js - 非映射属性 - Sequelize

转载 作者:行者123 更新时间:2023-12-03 22:28:42 25 4
gpt4 key购买 nike

支持的有:React、Redux 和 Sequelize。
基本上,我希望能够在 Redux 存储更新时将对象标记为 dirty

function updateCar(carToUpdate, car) {
switch(car[1]) {
case "models":
carToUpdate.models = car[3];
carToUpdate.setDirty();
break;
}
};

然后当有人点击保存按钮时,我只想更新那些将脏标志设置为 true 的模型
var state = request.body;

state.forEach(function (car) {
if (car && car.isDirty) {
updateCar(car);
}
}

现在我有以下汽车模型:
module.exports = function (sequelize, DataTypes) {
var Cars = sequelize.define('Cars',
{
name: DataTypes.STRING,
type: DataTypes.INTEGER,
models: DataTypes.INTEGER,
//Next is NOT working, this does not make it non-mapped
isDirty: {
type: DataTypes.BOOLEAN,
scope: false
},
},
{
classMethods: {
associate: function (models) {
// associations can be defined here
}
},
instanceMethods: {
setDirty: function() {
this.isDirty = true;
}
}
});
return Cars;
};

任何有非映射字段或类似经验的人?

最佳答案

终于找到了

汽车模型应该包含一个 VIRTUAL 属性:

module.exports = function (sequelize, DataTypes) {
var Cars = sequelize.define('Cars',
{
name: DataTypes.STRING,
type: DataTypes.INTEGER,
models: DataTypes.INTEGER,
isDirty: {
type: DataTypes.VIRTUAL
},
},
{
classMethods: {
associate: function (models) {
// associations can be defined here
}
}
});
return Cars;
};

接下来应该在更新值时设置标志:
function updateCar(carToUpdate, car) {
switch(car[1]) {
case "models":
carToUpdate.models = car[3];
carToUpdate.isDirty = true;
break;
}
};

然后save方法可以检查 isDirty标志
var state = request.body;
state.forEach(function (car) {
if (car && car.isDirty) {
console.log(car.name +": "+ car.isDirty);
updateCar(car);
}
}, this);

最后但并非最不重要的是,我们将 isDirty 标志重置为 false,因此我们不会一遍又一遍地更新相同的模型。
var save = function () {
var state = carStore.getState();
return $.ajax({
url: "/Cars/update",
data: JSON.stringify(state),
method: "POST",
contentType: "application/json"
}).then(function() {
carStore.dispatch({
type: 'resetDirty',
data: null
});
});
};

以及重置标志的调度方法:
function updateReducer(state, action) {
switch (action.type) {
case 'load':
return action.data;
case 'update':
return updateCars(action.carChanges, state);
case 'resetDirty':
return resetDirtyFlags(state);
default:
return action.data;
}

}

function resetDirtyFlags(state) {
var newState = $.extend(true, [], state);
if(state) {
newState.forEach(function(car) {
car.isDirty = false;
}, this);
return newState;
}
return newState;
}

关于node.js - 非映射属性 - Sequelize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37205304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com