나는 EXTJS를 사용하여 학습 과정을 진행하고 있으며 도움을 많이 주시면 감사하겠습니다.ExtJS TaskRunner
나를위한 목표는 하나의 셀이 매분마다 값이 증가해야하는 그리드에 데이터를로드하는 것입니다. TaskRunner 함수를 사용하여 내 연구에서 갈 방법이지만 어디서 그것을 사용하는 방법을 알아낼 수 없습니다. 내 가정은 모델이나 컨트롤러에 들어갈 필요가 있지만 확실하지 않습니다. 내 간단한 프로젝트에서 나는 MVC 아키텍처를 사용하고있다.
현재 내 gird는 예상대로 작동합니다. 파일에서 읽으면 분 값을 생성하는 날짜 변환을 수행합니다. 그것은 내가 필요로하는 분 값입니다.
아래 코드는 제가 잘 알고있는 옳고 그름과 함께 작업하고있는 샘플 TaskRunner 스 니핏입니다.
var runner = new Ext.util.TaskRunner();
var task = runner.newTask({
run: store.each(function (item)
{
var incReq = item.get('request') + 1;
item.set('request', incReq);
}),
interval: 60000 // 1-minute interval
});
task.start();
모델 :
Ext.define("myApp.model.ActionItem", {
extend : "Ext.data.Model",
fields : [
{
name: 'pri',
type: 'int'
},
{
name: 'request',
type: 'int',
defaultValue: 0,
convert : function(v, model) {
return Math.round((new Date() - new Date(v))/60000);
}
}
]
});
컨트롤러 :
Ext.define("myApp.controller.HomeController", {
extend: "Ext.app.Controller",
id: "HomeController",
refs: [
{ ref: "ActionItemsGrid", selector: "[xtype=actionitemgrid]" },
{ ref: "DetailsPanel", selector: "[xtype=actionitemdetails]" }
],
pri: "",
models: ["ActionItem"],
stores: ["myActionStore"],
views:
[
"home.ActionItemDetailsPanel",
"home.ActionItemGrid",
"home.HomeScreen"
],
init: function() {
this.control({
"#homescreen": {
beforerender: this.loadActionItems
},
"ActionItemsGrid": {
itemclick: this.displayDetails
}
});
},
displayDetails: function (model, record) {
this.getDetailsPanel().loadRecord(record);
},
loadActionItems: function() {
var store = Ext.getStore("myActionStore");
store.load();
this.getActionItemsGrid().reconfigure(store);
}
});
보기 :
Ext.define("myApp.view.home.ActionItemGrid", {
extend: "Ext.grid.Panel",
xtype: "actionitemgrid",
resizable: true,
multiSelect: false,
enableDragDrop : false,
store: null,
columns:
[
{ header: "Pri", dataIndex: "pri", sortable: false, autoSizeColumn: true},
{ header: "Req", dataIndex: "request", sortable: false, autoSizeColumn: true}
],
viewConfig:
{
listeners: {
refresh: function(dataview) {
Ext.each(dataview.panel.columns, function(column) {
if (column.autoSizeColumn === true)
column.autoSize();
})
}
}
}
});
샘플 JSON 파일 :
{
"actionitems" : [
{
"pri": 1,
"request": "2014-12-30T03:52:48.516Z"
},
{
"pri": 2,
"request": "2014-12-29T05:02:48.516Z"
}
]
}
감사합니다. Lolo. 그것은 일종의 일이었습니다. 여기 내가 발견 한 문제가있다. 내가 '요청'이라는 모델을 변환 할 때 상점 값이 날짜에서 숫자로 변경되었다고 가정했는데 그렇지 않다고 생각합니다. 타이머가 꺼지면 셀의 값이 int의 최대 값까지 작아집니다. 롤 그래서 나는 간단한 테스트를하고 변환을 제거하고 그냥 * .txt 파일에 int를 사용하고 그것은 당신의 지시에 따라 일했습니다. 그래서 제가 개종자를 만났을 때 그것을 가게에 다시 놓을 수있는 방법이 있습니까? – Flexpadawan
'요청 '을 그대로두고 계산 된 필드로 모델에 두 번째 필드를 생성 할 수 있습니다. 예 : http://jsfiddle.net/peqjzm4x/. 그런 다음 원래 필드를 쉽게 수정할 수 있으며 계산 된 필드가 자동으로 업데이트됩니다. – Krzysztof
감사합니다. Lolo .... 정말 잘 돌아갔습니다. 시간 내 주셔서 감사합니다. – Flexpadawan