Это невозможно с Rc
просто из-за его структуры памяти:
// Equivalence:
struct RcBox<T> {
strong: AtomicUsize,
weak: AtomicUsize,
data: T,
};
struct Rc<T> {
ptr: *const RcBox<T>,
};
Следовательно, ожидается, что счетчики будут находиться рядом с T
, и поэтому вы не можете разделить счетчики между двумя отдельные элементы.
С точки зрения структуры памяти, вполне приемлемо создать альтернативу FlexRc
:
struct Counters {
strong: AtomicUsize,
weak: AtomicUsize, // if support for FlexWeak is desired.
ptr: *mut (),
drop: fn(*mut ()),
}
struct FlexRc<T> {
counters: *mut Counters,
ptr: *const T,
}
И это теоретически может позволить отображение ... однако создание безопасного интерфейса поверх это может быть нелегко.
Как запретить пользователю возвращать несвязанный срок жизни в map
? Достаточно ли того, чтобы срок службы обратной ссылки превышал срок службы flex
, чтобы быть безопасным?
fn fool(flex: FlexRc<Option<i32>>) -> FlexRc<i32> {
let i = 3;
flex.map(|_| &i)
}
Store.getRange ()
кажется именно тем, что вы ищете. Он вернет вам Ext.data.Record []
- массив записей. Если аргументы не переданы, возвращаются все записи.
function getJsonOfStore(store){
var datar = new Array();
var jsonDataEncode = "";
var records = store.getRange();
for (var i = 0; i < records.length; i++) {
datar.push(records[i].data);
}
jsonDataEncode = Ext.util.JSON.encode(datar);
return jsonDataEncode;
}
Попробуйте этот линейный код, он работал на меня как очарование:
var data = (store.getData().getSource() || store.getData()).getRange();