2014-12-31 6 views
2

나는 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" 
     } 
    ] 
} 

답변

2

당신은 작업을 생성 코드에서 오류가 - 당신이 호출의 결과, 구성 등록을하지 실행하는 기능을 제공해야한다. 이것을 시도하십시오 :

var runner = new Ext.util.TaskRunner(); 
var task = runner.newTask({ 
    run: function() { 
     store.each(function (item) 
     { 
      var incReq = item.get('request') + 1; 
      item.set('request', incReq); 
     }) 
    }, 

    interval: 60000 // 1-minute interval 
}); 
task.start(); 

loadActionItems 방법으로 코드를 삽입 할 수 있습니다.

+0

감사합니다. Lolo. 그것은 일종의 일이었습니다. 여기 내가 발견 한 문제가있다. 내가 '요청'이라는 모델을 변환 할 때 상점 값이 날짜에서 숫자로 변경되었다고 가정했는데 그렇지 않다고 생각합니다. 타이머가 꺼지면 셀의 값이 int의 최대 값까지 작아집니다. 롤 그래서 나는 간단한 테스트를하고 변환을 제거하고 그냥 * .txt 파일에 int를 사용하고 그것은 당신의 지시에 따라 일했습니다. 그래서 제가 개종자를 만났을 때 그것을 가게에 다시 놓을 수있는 방법이 있습니까? – Flexpadawan

+0

'요청 '을 그대로두고 계산 된 필드로 모델에 두 번째 필드를 생성 할 수 있습니다. 예 : http://jsfiddle.net/peqjzm4x/. 그런 다음 원래 필드를 쉽게 수정할 수 있으며 계산 된 필드가 자동으로 업데이트됩니다. – Krzysztof

+0

감사합니다. Lolo .... 정말 잘 돌아갔습니다. 시간 내 주셔서 감사합니다. – Flexpadawan