【发布时间】:2013-11-19 17:49:34
【问题描述】:
我在脚本# 0.7.5 中有以下类:
[ScriptNamespace("Scripts")]
public class MyClass
{
private Dictionary<string, string> stageMapping = new Dictionary<string, string>();
public PortfolioOptimisationOverlord()
{
stageMapping["first"] = "http://www.me.com/mike";
stageMapping["second"] = "http://www.me.com/terry";
stageMapping["third"] = "http://www.me.com/billy";
stageMapping["fourth"] = "http://www.me.com/bobby";
stageMapping["fifth"] = "http://www.me.com/richard";
}
}
不幸的是,在编译时它不会生成原型类,因此无法说它无法访问this。
如果我创建一个 int 类型的私有字段,它似乎可以工作,但不适用于字典或列表。
--编辑--
这里有更多信息:
由此产生的javascript是:
////////////////////////////////////////////////////////////////////////////////
// Scripts.PortfolioOptimisationOverlord
Scripts.PortfolioOptimisationOverlord = function Scripts_PortfolioOptimisationOverlord() {
/// <field name="_stageMapping" type="Object">
/// </field>
this._stageMapping = {};
this._stageMapping['first'] = 'http://www.me.com/mike';
this._stageMapping['second'] = 'http://www.me.com/terry';
this._stageMapping['third'] = 'http://www.me.com/billy';
this._stageMapping['fourth'] = 'http://www.me.com/bobby';
this._stageMapping['fifth'] = 'http://www.me.com/richard';
}
如果我添加一个名为 intField 的 int 私有字段:
////////////////////////////////////////////////////////////////////////////////
// Scripts.PortfolioOptimisationOverlord
Scripts.PortfolioOptimisationOverlord = function Scripts_PortfolioOptimisationOverlord() {
/// <field name="_stageMapping" type="Object">
/// </field>
/// <field name="_intField" type="Number" integer="true">
/// </field>
this._stageMapping = {};
this._stageMapping['first'] = 'http://www.me.com/mike';
this._stageMapping['second'] = 'http://www.me.com/terry';
this._stageMapping['third'] = 'http://www.me.com/billy';
this._stageMapping['fourth'] = 'http://www.me.com/bobby';
this._stageMapping['fifth'] = 'http://www.me.com/richard';
}
Scripts.PortfolioOptimisationOverlord.prototype = {
_intField: 0
}
如您所见,唯一的变化是添加了一个以 .prototype 结尾的类型。
构建失败。
【问题讨论】:
-
这看起来不像 javascript
-
你能再贴一些代码吗?生成的 Javascript 是什么样的。它在哪里失败说它无法访问这个?只是当您尝试创建此类的实例时?
-
顺便说一句,S# 不生产原型。我认为在 0.7.5 中它产生的模块模式就像 0.8 一样(它也产生 AMD 模式)。
-
另外,您可能想尝试 0.8。这是一个入门文档:github.com/theoutlander/scriptsharp/wiki/…
-
嗨尼克,感谢您的反馈,我已经澄清了上面的问题。我们不能移动到 0.8,因为我们被限制在 XP 或 Server 2013 中工作,它们不能运行 VS 2012,这是一个先决条件。我们的公司网络不支持任何其他操作系统,也没有办法绕过它(相信我,我已经尝试过!)所以我们必须等到发布才能移动。