2016-05-13 15 views
0

サポートはReact、Redux、Sequelizeです。 基本的には、Reduxストアが更新されたときにオブジェクトをdirtyとマークする必要があります。マップされていないプロパティ - Sequelize

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

誰かが保存ボタンをクリックしたときに、その後、私は彼らのダーティフラグが車のための真の

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; 
}; 

マップされていないフィールドやそれに類するものを経験したことがある人は誰ですか?

答えて

1

最終的に見つかりました。

車のモデルは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; 
    }  
}; 

次に保存方法はisDirtyフラグをチェックすることができます var state = request.body;

state.forEach(function (car) { 
    if (car && car.isDirty) { 
     console.log(car.name +": "+ car.isDirty); 
     updateCar(car); 
    } 
}, this); 

はなく、少なくとも最後に、私たちは、私たちは何度も同じモデルを更新しないfalseにisDirtyフラグをリセットします。

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; 
} 
+0

:) –

関連する問題