我想用 script sharp 写下下面这行:
App.SP = SP = Ember.Object.extend({
init: function (lineV, lineH, resourceMethod){...
这可能吗?我该怎么做?
我想用 script sharp 写下下面这行:
App.SP = SP = Ember.Object.extend({
init: function (lineV, lineH, resourceMethod){...
这可能吗?我该怎么做?
一般来说,每个脚本框架都有自己的定义类的变体模式,并且 script# 不支持所有可能的变体......所以你可以编写一个名为 SP 的 ac# 类,带有一个 Init 方法,并期望 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# 类,利用将这些类型构造转换为脚本的 script# 模式。
如果有关于模式本身的建议,非常欢迎,尤其是。因为有考虑使 script# 模式在未来变得更轻。
在回答另一个问题时,我想到了一种新方法,我将把它作为一个有潜力的想法分享,以防你仍然感兴趣,或者为其他人感兴趣。
编译器假设有一个特定的运行时契约(由 mscorlib.js 实现),其中包括 Type.registerClass 等 API 和其他相关方法。与其他具有自己定义类型的模式的框架一起工作的一种方法是简单地重新实现 mscorlib.js,这样 registerClass 之类的方法就可以作为通往其他库的桥梁。