Store.getById()得到Undefined

store.getById()要能成功得到record,需要有两个条件:
1、store的config Options中设置了id属性
2、创建record是要说明id属性
后者是时常被遗漏的要注意

[quote]
Record( Array data, [Object id] )
This constructor should not be used to create Record objects. Instead, use the constructor generated by create. The parameters are the same.
Parameters:
data : Array
An associative Array of data values keyed by the field name.
id : Object
(Optional) The id of the Record. This id should be unique, and is used by the Ext.data.Store object which owns the Record to index its collection of Records. If not specified an integer id is generated.
[/quote]


例如

Ext.BLANK_IMAGE_URL = '../resources/images/default/s.gif';
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';
/*sequece*/
var id=0;
/**屏蔽系统右键菜单*/
Util.forbidContextMenu();
Ext.onReady(function(){
var sm=new Ext.grid.CheckboxSelectionModel({});
var cm=new Ext.grid.ColumnModel([
sm,
{
header:"URL",
sortable:true,
dataIndex:'url',
editor:new Ext.form.TextField({
vtype:"url",
allowBlank:false
})
},
{
header:'删除',
renderer:delRender,
sortable:false,
menuDisabled:true,
dataIndex:'id'
}
]);
var ds=new Ext.data.JsonStore({
data:{data:[],number:0},
root:'data',
storeId:"strBlackUrl",
id:"id",
totalProperty: 'number',
fields:['id','url']
});

var grid=new Ext.grid.EditorGridPanel({
sm:sm,
cm:cm,
ds:ds,
title:'黑名单网址列表',
tbar:[
'->',
btnFactory('add'),
'-',
btnFactory('del'),
'-',
{
text:'保存',
cls:'x-btn-text-icon',
icon:'../images/backup.gif',
handler:saveHandler
}
]
});

var viewport=new Ext.Viewport({
layout:'fit',
id:'viewport',
items:[
grid
]
});
})
BlackUrl=Ext.data.Record.create([
{name:"url",mapping:"url"},
{name:"id",mapping:"id",id:true}
]);
function addHandler()
{
var record=new BlackUrl({url:"http://www.test.com",id:id},id);
id++;
Ext.StoreMgr.lookup("strBlackUrl").add(record);
}
function delHandler(id)
{
var store=Ext.StoreMgr.lookup("strBlackUrl");
var record=store.getById(id);
store.remove(record);
}
function saveHandler()
{

}


若没有提供第二个可选参数[b]var record=new BlackUrl({url:"http://www.test.com",id:id},id);[/b]
函数delHandler(id)中的store。getById()就会报错
import axios from 'axios' import { Message, MessageBox } from 'element-ui' import store from '../store' import { getToken } from '@/utils/auth' import Qs from 'qs' // 创建axios实例 const service = axios.create({ baseURL: process.env.BASE_API, // api 的 base_url timeout: 170000 // 请求超时时间 }) const service_moment = axios.create({ baseURL: process.env.MOMENT_BASE_API, // api 的 base_url timeout: 170000 // 请求超时时间 }) // request拦截器 service.interceptors.request.use( config => { if (store.getters.token) { config.headers['authToken'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 } if (config.isJson) { config.data = JSON.stringify(config.data) config.headers['Content-Type'] = 'application/json' config.headers['systemCode'] = 'web_xzpt' } else if (config.isFile) { // } else { config.data = Qs.stringify(config.data) // 格式化数据 config.headers['Content-Type'] = 'application/x-www-form-urlencoded' config.headers['systemCode'] = 'web_xzpt' } delete config.headers.Cookie return config }, error => { // Do something with request error console.log(error) // for debug Promise.reject(error) } ) // response 拦截器 service.interceptors.response.use( response => { /** * code为非0是抛错 可结合自己业务进行修改 */ const res = response.data if (res.code !== 0) { if (response.config && response.config.responseType === 'blob') { // 返回blob文件流的形式 return response } if (response.headers['content-disposition'] && response.headers['content-disposition'].indexOf('attachment') !== -1) { return response } // Message({ // message: res.message, // type: 'error', // duration: 5 * 1000 // }) // 50008:非法的token; 50012:其他客户端登录了; 50014:Token 过期了; if (res.code === 502 || res.code === 401 || res.code === 50014) { MessageBox.confirm( '你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' } ).then(() => { store.dispatch('FedLogOut').then(() => { location.reload() // 为了重新实例化vue-router对象 避免bug }) }) } return response.data } else { return response.data } }, error => { console.log('err' + error) // for debug Message({ message: '网络连接失败!' + error.message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) } ) export const upload = (url, fileInptId, data) => { const file = document.querySelector('#' + fileInptId).files[0] var formData = new window.FormData() formData.append('file', file) if (data) { for (const key in data) { formData.append(key, data[key]) } } return service.post(url, formData, { isFile: true, headers: { 'Content-Type': 'multipart/form-data' } }) } export const uploadFile = (url, formData) => { return service.post(url, formData, { isFile: true, headers: { 'Content-Type': 'multipart/form-data' } }) } export default service export const postRequest = (url, params) => { return service.post(url, params) } export const uploadFileRequest = (url, params) => { return service.post(url, params) } export const putRequest = (url, params) => { return service.put(url, params) } export const deleteRequest = (url) => { return service.delete(url) } export const getRequest = (url) => { return service.get(url) } export const postRequest2 = (url, params, config) => { return service.post(url, params, config) } export const postRequest3 = (url, params, config) => { return service_moment.post(url, params, config) } export const postJson = (url, params) => { return service.post(url, params, { isJson: true }) } export const postDownloadFileForBlob = async function(url, params, config, filename) { if (!config) { config = {} } config.responseType = 'blob' return new Promise((resolve, reject) => { service.post(url, params, config).then(res => { if (res.status !== 200) { this.$message.error('获取文件失败:' + res.statusText) reject(false) } const blob = new Blob([res.data], { type: res.headers['content-type'] }) const downloadElement = document.createElement('a') const href = window.URL.createObjectURL(blob) // 创建下载的链接 downloadElement.href = href const contentDisposition = res.headers['content-disposition'] // console.log(contentDisposition) if (filename) { downloadElement.download = filename // 下载后文件名 } else { downloadElement.download = decodeURI(contentDisposition.split(';')[1].split('=')[1].replace(/%/g, '%25')) // 下载后文件名 } document.body.appendChild(downloadElement) downloadElement.click() // 点击下载 document.body.removeChild(downloadElement) // 下载完成移除元素 window.URL.revokeObjectURL(href) // 释放掉blob对象 resolve(true) }) }) } export const getDownloadFileForBlob = (url, filename) => { return new Promise((resolve, reject) => { service.get(url, { responseType: 'blob' }).then(res => { if (res.status !== 200) { reject(new Error('获取文件失败:' + res.statusText)) return } const blob = new Blob([res.data], { type: res.headers['content-type'] }) const downloadElement = document.createElement('a') const href = window.URL.createObjectURL(blob) downloadElement.href = href if (filename) { downloadElement.download = filename } else { const contentDisposition = res.headers['content-disposition'] if (contentDisposition) { downloadElement.download = decodeURI(contentDisposition.split(';')[1].split('=')[1].replace(/%/g, '%25')) } } document.body.appendChild(downloadElement) downloadElement.click() document.body.removeChild(downloadElement) window.URL.revokeObjectURL(href) resolve(true) }).catch(error => { reject(error) }) }) } export const postDownloadFileForBlob2 = (url, params, config) => { if (!config) { config = {} } config.responseType = 'blob' return new Promise((resolve, reject) => { service.post(url, params, config).then(res => { if (res.status !== 200) { this.$message.error('获取文件失败:' + res.statusText) reject(false) } // console.log('res.data',res.data); const blob = new Blob([res.data], { type: res.headers['content-type'] }) if (blob.type === 'application/json') { // console.log('拦截器',res); const reader = new FileReader() reader.readAsText(blob, 'utf-8') reader.onload = function() { console.log(reader.result) resolve(JSON.parse(reader.result || '')) } } else { var blobURL, tempLink try { // 创建新的URL并指向File对象或者Blob对象的地址 blobURL = window.URL.createObjectURL(blob) // 创建a标签,用于跳转至下载链接 tempLink = document.createElement('a') tempLink.style.display = 'none' tempLink.href = blobURL const contentDisposition = res.headers['content-disposition'] tempLink.setAttribute('download', decodeURI(contentDisposition.split(';')[1].split('=')[1])) // 兼容:某些浏览器不支持HTML5的download属性 if (typeof tempLink.download === 'undefined') { tempLink.setAttribute('target', '_blank') } // 挂载a标签 document.body.appendChild(tempLink) tempLink.click() resolve(true) } catch (err) { this.$message.error('获取文件失败:' + err.message) reject(false) } finally { if (tempLink) { document.body.removeChild(tempLink) } // 释放blob URL地址 if (blobURL) { window.URL.revokeObjectURL(blobURL) } } } }) }) } 我的统一请求js 若遇到请求接口Request URL http://localhost:9528/api/piccxzpt_garage/repairShopInfo/getById Request Method POST Status Code 401 Unauthorized Remote Address 127.0.0.1:9528 Referrer Policy strict-origin-when-cross-origin时也就是 Status Code 401 Unauthorized 我该如何跳转到登录页
最新发布
07-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值