我想用脚本sharp编写以下行:
App.SP = SP = Ember.Object.extend({
init: function (lineV, lineH, resourceMethod){...
这可能吗?我怎么能这样做?
答案 0 :(得分:2)
通常,每个脚本框架都有自己的定义类的变体模式,而脚本#不支持所有可能的变体...所以你可以使用Init方法编写一个名为SP的ac#类,并且期望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#类,利用将这些类型结构转换为脚本的脚本#pattern。
如果有关于模式本身的建议,那么非常欢迎,尤其是因为有人认为使脚本#fode在未来的重量要轻得多。
答案 1 :(得分:1)
在回答另一个问题时,我想到了一种新的方法,即如果您仍然感兴趣,或者其他人在路上,我会分享一些具有潜力的想法。
编译器假定某个运行时契约(由mscorlib.js完成)包括类似Type.registerClass和其他相关方法的API。使用自己的模式来定义类型的其他框架的一种方法是简单地重新实现mscorlib.js,使得像registerClass这样的方法充当其他库的桥梁。