【问题标题】:extjs commit answer from server to storeextjs 从服务器提交答案到存储
【发布时间】:2013-06-03 22:45:31
【问题描述】:

我尝试开发自己的代理(扩展 Ext.data.proxy.Proxy)。从我的服务器(json)获得响应后,我可以对其进行解码并使用我的 Json 阅读器创建一组记录以提交到商店。据我了解,我必须创建一个操作对象并使用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);

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

【问题讨论】:

  • 这很有趣,我不知道答案,但你能提供一些上下文吗?为什么需要新的代理?为什么不覆盖 Server.js?来自您的代理的更多代码也会很好。并不是说我确定我可以提供帮助,只是感兴趣..
  • 我正在尝试为 websockets 做一些实现。我只想知道只有一组记录和一个商店,我该怎么做才能更新商店。
  • 一般来说,当你有一组记录和一个商店时,你可以只使用 loadData ,但这并不能回答你最初的问题..
  • 你检查ExtJS-WebSocket了吗?
  • 是的,但不是我想要的

标签: javascript extjs extjs4 store


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    因此,对您的问题的简短回答是,您需要执行传递给您正在实现的 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 should ideally be named HttpProxy”)。没有运气。

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

    那么,也许你可以聪明点:

    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);
            });
        }
    });
    

    【讨论】:

    • 感谢您的回答..!因此,Operation 对象在存储中被实例化,然后通过整个过程,直到您将数据提交到存储。那么,如果我收到来自服务器的调用来更新某些数据而没有请求它怎么办(这就是使用 websockets 的原因)。该过程从拥有一些数据、与它们关联的存储和要执行的操作开始。问题是如何将它们应用到商店(如何实例化 Operation 对象)。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多