ctx.initResource()

Khởi tạo resource của ngữ cảnh hiện tại: nếu chưa tồn tại ctx.resource, sẽ tạo một instance theo kiểu chỉ định và bind vào ngữ cảnh; nếu đã tồn tại thì sử dụng trực tiếp. Sau đó có thể truy cập qua ctx.resource.

Kịch bản áp dụng

Thường chỉ sử dụng trong kịch bản JSBlock (block độc lập). Đa số block, popup, v.v. đã bind sẵn ctx.resource, không cần gọi thủ công; JSBlock mặc định không có resource, cần ctx.initResource(type) trước rồi tải dữ liệu qua ctx.resource.

Định nghĩa kiểu

initResource(
  type: 'APIResource' | 'SingleRecordResource' | 'MultiRecordResource' | 'SQLResource'
): FlowResource;
Tham sốKiểuMô tả
typestringKiểu resource: 'APIResource', 'SingleRecordResource', 'MultiRecordResource', 'SQLResource'

Giá trị trả về: Instance resource trong ngữ cảnh hiện tại (tức ctx.resource).

Khác biệt với ctx.makeResource()

Phương thứcHành vi
ctx.initResource(type)Nếu ctx.resource không tồn tại sẽ tạo và bind; nếu đã tồn tại trả về trực tiếp. Đảm bảo ctx.resource khả dụng
ctx.makeResource(type)Chỉ tạo instance mới và trả về, không ghi vào ctx.resource. Phù hợp với kịch bản cần nhiều resource độc lập hoặc sử dụng tạm thời

Ví dụ

Dữ liệu list (MultiRecordResource)

ctx.initResource('MultiRecordResource');
ctx.resource.setResourceName('users');
await ctx.resource.refresh();
const rows = ctx.resource.getData();
ctx.render(<pre>{JSON.stringify(rows, null, 2)}</pre>);

Bản ghi đơn (SingleRecordResource)

ctx.initResource('SingleRecordResource');
ctx.resource.setResourceName('users');
ctx.resource.setFilterByTk(1); // 指定主键
await ctx.resource.refresh();
const record = ctx.resource.getData();

Chỉ định data source

ctx.initResource('MultiRecordResource');
ctx.resource.setDataSourceKey('main');
ctx.resource.setResourceName('orders');
await ctx.resource.refresh();

Lưu ý

  • Trong đa số block (form, table, chi tiết, v.v.) và kịch bản popup, ctx.resource đã được môi trường runtime bind sẵn, không cần gọi ctx.initResource.
  • Chỉ trong các ngữ cảnh mặc định không có resource như JSBlock mới cần khởi tạo thủ công.
  • Sau khi khởi tạo cần gọi setResourceName(name) để chỉ định collection, rồi tải dữ liệu qua refresh().

Liên quan