有没有办法可以实例化一个Javascript变量(使用ClearScript.V8)并捕获C#中的更新,以便我可以更新数据库中的值?
当我使用对象时,它会起作用,如下所示:
public class SmartBoolean : ISmartVariable
{
private Boolean _simulation;
private Guid UserId;
private long userKeyId;
private long variableKeyId;
private string Name;
private Boolean _value;
public Boolean value
{
get {
return _value;
}
set {
_value = value;
if (!_simulation)
{
if (value)
new SmartCommon().SetTrue(userKeyId, variableKeyId);
else
new SmartCommon().SetFalse(userKeyId, variableKeyId);
}
}
}
public SmartBoolean(Guid UserId, long userKeyId, long variableKeyId, string Name, Boolean value, Boolean simulation)
{
this.Name = Name;
this._value = value;
this.UserId = UserId;
this.userKeyId = userKeyId;
this.variableKeyId = variableKeyId;
this._simulation = simulation;
}
public Boolean toggle()
{
this.value = !this._value;
return this._value;
}
}
但是Javascript代码需要使用像
这样的对象variable.value
而不是简单
可变
答案 0 :(得分:2)
您可以使用调用智能变量的访问器定义JavaScript全局属性:
dynamic addSmartProperty = engine.Evaluate(@"
(function (obj, name, smartVariable) {
Object.defineProperty(obj, name, {
enumerable: true,
get: function () { return smartVariable.value; },
set: function (value) { smartVariable.value = value; }
});
})
");
var smartVariable = new SmartBoolean(...);
addSmartProperty(engine.Script, "variable", smartVariable);
engine.Execute("variable = true");