我想用脚本sharp写下一行:
App.SP = SP = Ember.Object.extend({
init: function (lineV, lineH, resourceMethod){...
这可能吗?我该怎么做?
通常,每个脚本框架都有自己的定义类的变体模式,并且script#不支持所有可能的变体。。。因此,您可以使用Init方法编写一个名为SP的c#类,并期望定义类的EmberJS方法就是结果。
您可以为Ember.Object定义类,用一个扩展方法来获取字典,用一堆名称/值对填充字典,例如"init",其中的值设置为静态方法的委托。
示例(这只是一个开始,我相信如果你继续走这条路,这将需要调整和更多的返工):
在导入库中:
namespace EmberApi {
[Imported, ScriptNamespace("Ember"), ScriptName("Object")]
public static class EmberObject {
public static object Extend(Dictionary<string, object> nameValuePairs) {
return null;
}
}
}
在你的代码中:
public static void App {
static App() {
Dictionary<string, object> members = new Dictionary<string, object>();
members["init"] = Init;
object sp = EmberObject.Extend(members);
}
public static void Init(int lineV, int lineH, string resourceMethod) { ... }
}
所以我认为这是可能的,但你失去了一堆价值支柱,那就是像c#一样编写代码。
更好的方法是能够使用现有的API/框架,但将自己的代码编写为常规的c#类,这些类利用将这些类型构造转换为脚本的脚本模式。
如果有关于模式本身的建议,非常欢迎,特别是因为有人考虑在未来让脚本#模式的重量减轻很多。
在回答另一个问题时,我想到了一种新的方法,我将把它作为一个有潜力的想法分享给大家,以防你仍然感兴趣,或者将来对其他人感兴趣。
编译器假定有一个特定的运行时契约(由mscorlib.js实现),其中包括Type.registerClass等API和其他相关方法。与其他具有自己的类型定义模式的框架合作的一种方法是简单地重新实现mscorlib.js,使registerClass等方法充当到另一个库的桥梁。