【问题标题】:ExtJS 4.2 : Load single item from remote storeExtJS 4.2:从远程存储加载单个项目
【发布时间】:2013-07-07 09:33:49
【问题描述】:

假设我有一家商店,我的数据库中有 20,000,000 行。 (也足以让我设置页面大小,这样我每页只能返回 100 行)。由于我设置了页面大小,所以当我进行原始调用时,我只能得到 100 个项目。因此以下返回 null:

Ext.getStore('MyLargeStore').getById(200); // returns null

这对我来说很有意义,因为从技术上讲,JS 端的商店没有设置特定的 id。但是,如果该 id 不存在,是否有强制查找?据我所知,我已经在我的商店中完成了所有需要它的“远程”和“自动”:

Ext.define('MyApp.store.MyLargeStore', {
extend: 'Ext.data.Store',

requires: [
    'MyApp.model.MyLargeModel'
],

constructor: function(cfg) {
    var me = this;
    cfg = cfg || {};
    me.callParent([Ext.apply({
        autoLoad: true,
        autoSync: true,
        model: 'MyApp.model.MyLargeModel',
        remoteFilter: true,
        remoteSort: true,
        storeId: 'MyLargeModel',
        buffered: true,
        pageSize: 100
    }, cfg)]);
}
});

当一个 id 不存在时,有没有办法让它从远程服务器中提取?我似乎在文档中找不到方法(除非我错过了它,因为他们的文档有时有点难以破译=/)

另外,我假设您总是可以在商店中加载,但我很确定如果我只加载那 1 行,那么使用该商店的所有其他位置也将只有那一行(我没有'不一定想要)所以理论上即时创建商店是我唯一的选择吗?似乎应该有一个更简单的方法,因此我想我会问。必须有更好的方法,而不是创建一个商店,然后从该新商店获取记录......

【问题讨论】:

    标签: extjs store extjs4.2


    【解决方案1】:

    您在这里尝试做的是错误的解决问题的方法。您需要退回到您需要此行的内容,并使用您尝试查找的行的 ID 对您的服务器进行独立的 ajax 调用。然后,服务器将在数据库中查找该单行,然后返回数据为您需要该行的任何内容创建模型。这个逻辑应该独立于 store 来完成。

    【讨论】:

    • 这将是我通常会做的(做一个侧面的 ajax 调用),但我认为 ExtJS 会有某种方式为我做调用。不是这样,还是我会通过模型进行独立通话? (或者我真的需要创建一个侧面 AJAX 调用来获得单数行吗?)[我试图尽可能多地保留 ExtJS/Architect 中包含的所有内容,因此我为什么要尝试这种方法]
    • 您在此处尝试执行的操作超出了商店的设计范围。我可以看到您认为它在高设计级别上可能具有此功能的地方,但是当您了解商店如何与服务器交互的代码时,它并不是为了做到这一点而设计的。
    • 我明白了,但是我的问题然后变成通过模型会更好,或者我应该直接对我的服务器进行 ajax 调用并从那里获取数据? (PS谢谢你的帮助顺便说一句=D)
    • 我对您的项目要求了解得不够多,无法做出该决定,这实际上取决于您正在做的事情更适合什么。考虑到您的要求和数据的使用位置,尝试做出最佳选择。如果数据需要在许多设计使用模型的地方使用,我会这样做,如果没有,直接ajax调用会更好,因为它是轻量级的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2015-12-22
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多