EXT.NET:“;未捕获的类型错误:无法读取属性'数据'未定义的“;将记录添加到存储时
EXT.NET: "Uncaught TypeError: Cannot read property 'data' of undefined" when adding record to store
我整个下午都在为这个问题而挣扎,在网上找不到任何可行的解决方案,所以我们开始吧。我会尽我最大的努力彻底解决我的问题,因为我已经总结了它的主要元素(换句话说,我在这里的一些代码将是一个简化的例子,我将在这里和那里讲述一些故事,以更好地理解)。首先,我使用EXT.NETMVC模型,并且在很大程度上使用标记。所以,这是我的商店(实际代码):
<ext:Store ID="storeActivityProjectHistory" runat="server" UseIdConfirmation="true">
<Reader>
<ext:JsonReader IDProperty="idProject">
<Fields>
<ext:RecordField Name="idActivity" Type="Int" />
<ext:RecordField Name="idProject" Type="Int" />
<ext:RecordField Name="nmProject" Type="String" />
<ext:RecordField Name="csStatus" Type="String" />
<ext:RecordField Name="dsDetails" Type="String" />
<ext:RecordField Name="dtDate" Type="Auto" DateFormat="MM/yyyy" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
一点见解:一个活动可能包含几个项目。通常人们会期待另一种方式,但事实并非如此。这是我链接到这个商店的网格(为了简单起见,我从这个商店中删除了几个标签):
<ext:GridPanel ID="grdActivityProjectHistory" runat="server" StripeRows="true" Title='<%# Html.GetText("History") %>' Width="621" AutoHeight="true"
StoreID="storeActivityProjectHistory">
<ColumnModel>
<Columns>
<ext:Column ColumnID="idActivity" DataIndex="idActivity" Hidden="true" />
<ext:Column ColumnID="idProject" DataIndex="idProject" Hidden="true" />
<ext:Column ColumnID="nmProject" Header="Project" DataIndex="nmProject" Width="250" />
<ext:Column ColumnID="dsDetails" DataIndex="dsDetails" Hidden="true" />
<ext:Column ColumnID="csStatus" Header="Status" DataIndex="csStatus" Width="75" />
<ext:DateColumn ColumnID="dtDate" Header="Date" DataIndex="dtDate" Width="75" Format="MM/yyyy" />
</Columns>
</ColumnModel>
</ext:GridPanel>
现在,有一些解释:每当创建"活动"时,用户可能会将一个或多个项目链接到它。此外,他可以更改此链接的状态,以标记该项目在"活动"中是活动的还是非活动的。这个链接中的更改必须存储在历史记录中,这就是上面的网格和存储提供的支持
无论何时创建此链接,它都必须处于活动状态并具有默认详细信息("已创建记录")。由于这是一种默认行为,并且我们使用了大量存储过程来处理数据库,所以我认为每当创建新链接时,我都可以直接从SP将这些值插入数据库换句话说,每当创建链接时,历史上就已经有一条记录了
这就是我在加载活动时将所述记录加载到存储中的方式,也就是我想的,将事情搞砸的第1部分(不要担心projectId变量):
var fillActivityProjectStore = function(projectId) {
var activityProjectHistoryList;
currentProjectHistoryList = new Array();
if (loadedActivity.activityProjectHistoryList!= null) {
activityProjectHistoryList = loadedActivity.activityProjectHistoryList.Original;
activityProjectHistoryList.forEach(function(activityProjectHistory) {
if (activityProjectHistory.cdProject == projectId)
currentProjectHistoryList.push(activityProjectHistory);
});
storeActivityProjectHistory.loadData(currentProjectHistoryList);
}
}
对这种明显混乱的解释是:loadedActivity.activityProjectHistoryList.Ooriginal保存链接到当前加载的活动的所有项目的所有历史信息,在这里我只选择与其中一个项目相关的信息并加载到存储中。
而且,对于gran的结局,每当我试图改变这个链接的状态(它应该在网格中添加第二行,在已经加载的当前行下)时,都是当我收到可怕的"未捕获类型错误:无法读取未定义的属性‘data’"时
这就是我尝试添加新行的方式:
var addNewHistoryRecord= function() {
if (selectedLineIndex> -1) {
var record= storeProjects.getAt(selectedLineIndex).data;
var recordHistory= {
idActivity: 0, //Server-side handles it
idProject: record.idProject,
nmProject: record.nmProject,
dsDetails: dsDetailsField.getValue(),
csStatus: csStatusField.getValue(),
dtDate: dtDateField.getValue()
}
storeActivityProjectHistory.addRecord(recordHistory); // <--RIGHT HERE!
}
}
好吧,我对太长的帖子和愚蠢的变量名感到抱歉,我不得不把它们翻译成英语,因为我们在代码中使用我们的母语(这很糟糕)。我很确定storeActivityProjectHistory.loadData和storeActivityPProjectHistory.addRecord方法之间的关系是我的问题,但我只是不知道该怎么办。提前感谢,如果需要更多代码,我将发布更多的代码(例如,人们可能会注意到一些全局变量和我以前没有提到的最后一个javascript方法中的"storeProject",但我认为它实际上并不相关)。希望你们能帮忙!
编辑:按照指示,我已将store.addRecord更改为store.add,现在它在同一点返回以下错误:未捕获类型错误:对象#对象没有方法"join"有什么想法吗?
好的,我找到了答案。感谢Reimius让我不再懒惰,而是真正关注文档。泛型对象无法与store.add()一起使用,需要Ext.data.Record的子类实例。
为了做到这一点,以下是我遵循的简洁模板,并在不到10分钟的时间内解决了我的问题:http://docs.sencha.com/extjs/3.4.0/#/api/Ext.data.Record-static-method-创建
尽管文档本身说store.add接受Ext.data.Record[],但在我以正确的方式创建对象(即recordHistory)后,我并没有使用它storeActivityProjectHistory.add(recordHistory)做到了。
- 一台特定计算机的Ajax请求数据未定义/失败
- JavaScript-获取数据属性的值返回未定义的值
- $.每个jquery循环打印一个“;未定义的“;对于getJSON请求后的每个元素,网格数据都会完美地打印出来
- 有了字段的名称,我如何用空白数据初始化对象的未定义字段
- Chart.js2.X中的条形值-数据集元数据未定义
- Json显示来自网站的数据显示仅未定义
- 引用错误:在尝试使用ajax发送数据时未定义
- 使用Breeze脱机数据时出现未定义的问题不是函数
- 无法读取数据“;对象名称“;未定义的角度方向
- Jquery从JSON获取数据(未定义)
- 从 Angular 数据工厂中的 HTTP POST 请求接收未定义的结果
- 服务变量分配了数据,但在访问时始终未定义
- 在脚本中从电子表格中获取数据:“未定义数据表”
- 下划线.js:未捕获的引用错误:未定义数据
- ASP.NET中从JSON返回的未定义数据
- oPage未定义数据表和twitter引导程序
- 数据表类型错误:未定义数据
- Angular中$http请求后的链接函数中未定义数据
- 需要帮助来解决 - 未捕获的引用错误:未定义数据
- Node.js, Express和Mongoose,未定义数据