Ну, слепой перевод "1: 1" будет выглядеть так:
(при условии, что у вас есть [Import]
ed класс (ы) для Ext.data.proxy.Client и Ext.emptyFn)
Ext.Define(
"jslate.data.Proxy"
new Dictionary(
"extend", "Ext.data.proxy.Client",
"constructor", new Action<Dictionary>(delegate(Dictionary config) {
Client self = (Client)Script.Literal("this");
self.CallParent(new Object[] { config });
self.SetReader(self.reader);
self.DataManager = config["dataManager"];
}),
"read", new Action<Object, Action, Object>(delegate (Object operation, Action callback, Object scope) {
Client self = (Client)Script.Literal("this");
self.DataManager.Read(operation, callback, scope);
},
"clear", Ext.EmptyFn
)
);
В целом это кажется жестким соединением двух разных ООП-парадигм и сред ввода.Тем не менее, мне было бы любопытно посмотреть, можете ли вы сделать что-то вроде:
(при условии, что ExtDataProxyClient равен [Import]
ed, а ICanInvokeParent
определяет CallParent()
)
class JslateDataProxy : ExtDataProxyClient, ICanInvokeParent
{
public JslateDataProxy(Config config)
{
this.CallParent(config);
this.SetReader(this.Reader);
this.DataManager = config.Datamanager;
}
public void Read(Object operation, Action callback, Object scope)
{
this.DataManager.Read(operation, callback, scope);
}
public Action Clear = Ext.EmptyFn;
}
static class Utils
{
public static void RegisterWithExt(Type t)
{
// extract fields, methods, constructor from type t. populate in a Dictionary(Object)
Dictionary typeSpecificationForDefine = ...;
// invoke define
Ext.Define(typeSpecificationForDefine);
}
}
...
Utils.RegisterWithExt(typeof(JslateDataProxy));
...
Я подозреваю при этом вы столкнетесь с неожиданным поведением, но я признаю, что не углубился в структуру скриптов # и ExtJS, чтобы знать наверняка здесь.