- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的:
当单击其中一个框时,下面的列表将在服务器端被过滤。
如果我选择网格中的行然后提交过滤器,我会收到以下错误:
“为本地缓存中不存在的 ID 调用的 getById”
即使过滤器确实包含我选择的记录,也会引发此问题。
这是模块:
Ext.define('NG.model.auxClasses.notifications.WhatsNew', {
extend: 'Ext.data.Model',
idProperty: 'iD',
autoLoad: true,
fields: [
{ name: 'iD', type: 'int' },
{ name: 'isActive', type: 'boolean' },
{ name: 'documentIdentifier', type: 'string' },
{ name: 'sourceSiteName', type: 'string' },
{ name: 'targetSiteName', type: 'string' },
{ name: 'createDate', type: 'date', dateFormat: 'c' },
{ name: 'businessArchiveEvent', type: 'string' },
{ name: 'businessArchive', type: 'string' },
{ name: 'previousWhatsNewEvents' },
{ name: 'isPin', type: 'boolean' },
{ name: 'IsDocumentReadByMe', type: 'boolean' },
{ name: 'isDocumentReadByOthers', type: 'boolean' },
{ name: 'documentYear', type: 'int' },
{ name: 'businessDirection', type:'int'}
],
// self association model
associations: [{
type: 'hasMany',
model: 'auxClasses.notifications.WhatsNew',
name: 'previousWhatsNewEvents',
primaryKey: 'id',
associationKey: 'previousWhatsNewEvents'
}],
proxy: {
type: 'rest',
url: 'api/WhatsNew/'
}
});
这是商店:
Ext.define('NG.store.WhatsNews', {
extend: 'NG.store.AbstractStore',
model: 'NG.model.auxClasses.notifications.WhatsNew',
alias: 'store.whatsnewstore',
autoLoad:true,
buffered: true,
pageSize: 50
});
更新:
我已经跟着兔子到了洞里,找到了一个我不确定是否可行的解决方法:
这是我失败的地方:
refresh: function() {
...
// Don't need to do this on the first refresh
if (me.hasFirstRefresh) {
// Some subclasses do not need to do this. TableView does not need to do this.
if (me.refreshSelmodelOnRefresh !== false) {
me.selModel.refresh();
} else {
// However, even if that is not needed, pruning if pruneRemoved is true (the default) still needs doing.
me.selModel.pruneIf(); <<< HERE WE FAIL. THIS METHODS CALLS THE GET BY ID
}
}
...
}
所以在我看来,我添加了以下 View 配置:
viewConfig: {
refreshSelmodelOnRefresh:true // Workaround : if this is not set to true when the grid will refresh and a record will be selected we will get an ext error
},
这解决了所引发的错误,但我不确定最终结果以及以后可能造成的危害。
如果有人可以遮光...
有解决办法吗?
最佳答案
您可以做一些事情-
将您的 pageSize 至少增加到 100,缓冲存储并不是真正为小型记录集设计的
使用以下覆盖:
此覆盖修复了当存储为缓冲类型时的多个错误,并修复了导致初始 hasId 无法工作的错误,因为 store.getById() 方法需要一个 ID 而不是记录,同时在记录时强制进行双重验证未找到,因为它将两个检查放在一个 if 语句中。
Ext.override(Ext.selection.Model, {
storeHasSelected: function(record) {
var store = this.store,
records,
len, id, i, m;
if (record.hasId()) {
return store.getById(record.getId());
} else {
if (store.buffered) {//on buffered stores the map holds the data items
records = [];
for (m in store.data.map) {
records = records.concat(store.data.map[m].value);
}
} else {
records = store.data.items;
}
len = records.length;
id = record.internalId;
for (i = 0; i < len; ++i) {
if (id === records[i].internalId) {
return true;
}
}
}
return false;
}
});
如果 1 和 2 都不起作用,请尝试:
Ext.view.AbstractView.override({
refresh: function() {
var me = this,
targetEl,
targetParent,
oldDisplay,
nextSibling,
dom,
records;
if (!me.rendered || me.isDestroyed) {
return;
}
if (!me.hasListeners.beforerefresh || me.fireEvent('beforerefresh', me) !== false) {
targetEl = me.getTargetEl();
records = me.getViewRange();
dom = targetEl.dom;
// Updating is much quicker if done when the targetEl is detached from the document, and not displayed.
// But this resets the scroll position, so when preserving scroll position, this cannot be done.
if (!me.preserveScrollOnRefresh) {
targetParent = dom.parentNode;
oldDisplay = dom.style.display;
dom.style.display = 'none';
nextSibling = dom.nextSibling;
targetParent.removeChild(dom);
}
if (me.refreshCounter) {
me.clearViewEl();
} else {
me.fixedNodes = targetEl.dom.childNodes.length;
me.refreshCounter = 1;
}
// Always attempt to create the required markup after the fixedNodes.
// Usually, for an empty record set, this would be blank, but when the Template
// Creates markup outside of the record loop, this must still be honoured even if there are no
// records.
me.tpl.append(targetEl, me.collectData(records, me.all.startIndex));
// The emptyText is now appended to the View's element
// after any fixedNodes.
if (typeof records !== 'undefined' && records !== undefined && records && records.length < 1) {
// Process empty text unless the store is being cleared.
if (!this.store.loading && (!me.deferEmptyText || me.hasFirstRefresh)) {
Ext.core.DomHelper.insertHtml('beforeEnd', targetEl.dom, me.emptyText);
}
me.all.clear();
} else {
me.collectNodes(targetEl.dom);
me.updateIndexes(0);
}
// Don't need to do this on the first refresh
if (me.hasFirstRefresh) {
// Some subclasses do not need to do this. TableView does not need to do this.
if (me.refreshSelmodelOnRefresh !== false) {
me.selModel.refresh();
} else {
// However, even if that is not needed, pruning if pruneRemoved is true (the default) still needs doing.
me.selModel.pruneIf();
}
}
me.hasFirstRefresh = true;
if (!me.preserveScrollOnRefresh) {
targetParent.insertBefore(dom, nextSibling);
dom.style.display = oldDisplay;
}
// Ensure layout system knows about new content size
this.refreshSize();
me.fireEvent('refresh', me);
// Upon first refresh, fire the viewready event.
// Reconfiguring the grid "renews" this event.
if (!me.viewReady) {
// Fire an event when deferred content becomes available.
// This supports grid Panel's deferRowRender capability
me.viewReady = true;
me.fireEvent('viewready', me);
}
}
}
});
关于javascript - ExtJs 4.2 刷新网格时报错 'getById called for ID that is not present in local cache',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19953421/
我正在使用 Entity Framework 并希望在 Repository 类中创建通用的 GetById 方法并进行预加载: 这是我使用延迟加载的方法: public virtual TEntit
因此,我使用带有 asp.net core 和 Entity Framework 6 的存储库模式从服务层访问数据库。问题是我有一个具有复合键的实体,而通用存储库采用 int 作为参数,因此我无法将多
我没有像 here 那样在数据存储读取上获得强一致性. 代码(使用Objectify)。 a = getById() // ofy().load().type(this.clazz).id(id).n
请参阅以下文章:https://www.codeproject.com/Articles/555855/Introduction-to-CQRS和 http://enterprisecraftsman
我的理解是您必须编写隔离功能的单元测试。因此,给定一个具有此方法的存储库类: Entity GetById(Guid id) 和一个假实现(使用字典进行存储),如果不先添加实体,您将如何编写测试?可以
我正在寻找一种创建通用 GetById 的方法,它将 params object[] 作为参数,知道找到键/s 字段并知道找到相关实体。 在寻找解决方案的过程中,我想到了一个返回 PK 字段定义的泛型
其次,我使用 raphaeljs 库在不同路径中进行了 SVG 形式转换。 我想通过raphaeljs 2.1.0 => getById(id); 的功能调用他来获取路径但是 Chrome 或 Fir
我将检查是否存在具有特定 id(我将其命名为“setid”)的元素。如果没有创建它并设置 id。不幸的是这不起作用。错误在哪里? 提前致谢。亚历克斯 var resultSet; var setId
这个问题已经有答案了: "document.getElementByClass is not a function" (12 个回答) 已关闭 7 年前。 我一直在使用以下代码来替换页面上 id 内的
我的 Sequelize 模型中有以下类方法: getById(id) { return new Promise((resolve, reject) => { var
我正在尝试使用 mgo (mongodb) 创建一个简单的 CRUD。 这是我的代码: package main import ( "fmt" "time" "gopkg.in
我有一个通用存储库,我正在尝试为我的单元测试创建最小起订量实现。我需要创建一个 GetById 方法。这是我决定将其转换为使用泛型之前的最小起订量实现。 mockUserRepository.Se
因此,如果用户使用屏幕足够大的设备(例如三星 Galaxy Tab),我会看到 2 个 fragment 。。 现在我正在显示 fragment 列表两次(同一 fragment 两次)。在 frag
public abstract class GenericRepository : IDisposable, IGenericRepository where T : class { prot
我正在尝试为我目前正在处理的基于 Entity Framework 的项目编写一个通用的通用存储库模式模板类。 (高度简化的)界面是: internal interface IRepository w
我正在尝试实现一个通用的 GetById(T id) 方法,该方法将满足可能具有不同 ID 类型的类型。在我的示例中,我有一个实体,其 ID 类型为 int,其中一个 ID 类型为 string。 但
我在我的应用程序中使用 CKeditor-4,在我的编码中我想通过它的 id 获取元素。下面的代码在 FF 和 IE 中返回元素,但在 Google Chrome 中返回 null。 var ele
我尝试使用 getById() 函数获取 Raphaël 对象,但是无论我尝试什么,该函数都会返回 null。 这是我正在使用的 Raphaël JS 代码: // Creates canvas 32
我知道有一个问题名为:Ember data: what is difference between find and findById? .但是,如果我错了,请更正,但我认为它与旧版本的 Ember
我正在尝试使用 Entity Framework 实现通用存储库。 我的存储库定义为: public class GenericRepository : IRepository where T
我是一名优秀的程序员,十分优秀!