2

我尝试开发自己的代理(扩展 Ext.data.proxy.Proxy)。从我的服务器(json)获得响应后,我可以对其进行解码并使用我的 Json 阅读器创建一组记录以提交到商店。据我了解,我必须创建一个 Operation 对象并使用operation.commitRecords(). 但是这条线if (clientRecords && clientRecords.length) 永远不会通过,因为 clientRecords 是未定义的。我无法理解如何使用这个对象,也无法理解如何初始化它。这是我当前的代码:

   options.action = options.action || 'read';
   var operation = new Ext.data.Operation(options);
   var json = reader.read(response);
   operation.commitRecords(json.records);

我应该怎么做才能提交记录?提前致谢!

4

2 回答 2

0

好的...搜索了商店如何初始化操作,然后它使用回调函数调用代理读取方法onProxyLoad(operation);。所以添加store.onProxyLoad(operation);正确地填充了商店。感谢各位的回复……他们帮助解决了我的问题。

于 2013-06-08T11:17:19.037 回答
0

那不是应该创建操作的代理,而是商店。然后它将这个操作与回调一起传递给代理。代理以自己的方式执行操作,完成后,使用回调通知商店。

因此,对您的问题的简短回答是您需要执行传递给您正在实现的 CRUD 方法的回调。假设它是read(Amit 是正确的,关于您的代码的一些上下文可能会有所帮助)。所以这将是这样的:

// see, the operation is given to us
read: function(operation, callback, scope) {
    var me = this;
    doWebsocketMagic(function() {
        // notify the store
        Ext.callback(callback, scope || me, [operation]);
    });
}

现在,这还不够,因为预计代理会操纵操作。您必须阅读其他代理的代码才能知道如何操作。ServerProxy本来可以为您节省这项工作,但您没有处理 HTTP 请求(“ ServerProxy 理想情况下应该命名为 HttpProxy ”)。没运气。

所以你应该从阅读MemoryProxy 的 read 方法的代码开始。它在一个地方提供了您必须做的所有事情(我认为)的示例。

然后,也许你可以聪明一点:

Ext.define('My.WebsocketProxy', {
    extend: 'Ext.data.proxy.Memory'

    ,read: function(operation, callback, scope) {
        var me = this;
        doWebsocketMagic(function(response) {
            me.data = response;
            Ext.data.proxy.Memory.prototype.read.call(me, operation, callback, scope);
        });
    }
});
于 2013-06-08T00:54:30.090 回答