script # - нужно предложение для определения функции extjs - PullRequest
1 голос
/ 08 ноября 2011

extjs использует косвенную систему определения классов. Вот пример

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'name',  type: 'string'},
        {name: 'age',   type: 'int'},
        {name: 'phone', type: 'string'},
        {name: 'alive', type: 'boolean', defaultValue: true}
    ],

    changeName: function() {
        var oldName = this.get('name'),
            newName = oldName + " The Barbarian";

        this.set('name', newName);
    }
});

Я пытаюсь понять, как это обернуть в s #. Вот то, что я пытаюсь завернуть

Ext.define('jslate.data.Proxy', {
    extend: 'Ext.data.proxy.Client',
   constructor: function (config) {
        this.callParent([config]);

        //ensures that the reader has been instantiated properly
        this.setReader(this.reader);
        this.dataManager = config.dataManager;
    },
    read: function (operation, callback, scope) {
        var me = this;
        me.dataManager.read(operation, callback, scope);

    },

    clear: Ext.emptyFn
});

Я не вижу, как это сделать - какие-либо предложения? Например, мне нужен массив имен и определений функций произвольного размера, каждая функция имеет любое количество аргументов. Как я могу получить «это» там.

1 Ответ

0 голосов
/ 08 ноября 2011

Ну, слепой перевод "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, чтобы знать наверняка здесь.

...