1

我正在构建一个使用很棒的日历插件https://github.com/SwarmOnline/Ext.ux.TouchCalendar的 Sencha Touch 应用程序,但是,为了利用事件功能,需要一些自定义实现。

我已经将事件模板绑定到一个从服务器获取数据的商店。它按计划工作,但问题是插件在存储中查找所有记录并将每个记录计为一个事件(因为在事件模型中,它查找“日期”作为起点和终点)。所以每天看起来都有一个事件,即使那些没有“项目”的都是空白的,请参阅:http ://cl.ly/image/3j461O2L2Y1k 。我只想显示带有“项目”的事件

我从服务器返回的数据格式如下(很多天没有“项目”):

 [
  {
  "day":28,
  "iscurrentmonth":false,
  "issunday":false,
  "date":"2013-05-28",

  "items":[
     {
        "id":134513,
        "title":"Subject",
        "typeid":3,
        "typename":"Essay",
        "author":"Bryan Fisher",
        "classname":"English 9A",
        "classid":344499,
        "courseid":60555
     },
     {
        "id":134485,
        "title":"Subject",
        "typeid":3,
        "typename":"Essay",
        "author":"Bryan Fisher",
        "classname":"English 10",
        "classid":344500,
        "courseid":60555
     }
  ]
 }
]

因此,我必须将数据数组的结构更改为以下格式:

[
  {
  "date":"2013-05-28",
  "id":134513,
  "title":"Subject",
  "typeid":3,
  "typename":"Essay",
  "author":"Bryan Fisher",
  "classname":"English 9A",
  "classid":344499
 },
 {
  "date":"2013-05-28",
  "id":134485,
  "title":"Subject",
  "typeid":3,
  "typename":"Essay",
  "author":"Bryan Fisher",
  "classname":"English 10",
  "classid":344500
 }
]

如何更改原始对象以匹配新格式?(取“日期”并将其插入“项目”节点)?

我对 underscore.js 之类的东西完全开放

提前致谢

4

1 回答 1

1

也许是我想太多了……

有点骇人听闻...

在 TouchCalendarEvents.js 我添加了以下方法来检查空事件 div

hideOthers: function(){
    var bar = $('.event-bar');

    for (var i = 0; i < bar.length; i++){
        var allBars = bar[i];
        if (allBars.innerHTML == ''){
            console.log('number ' + i + 'is Empty!' );

            allBars.remove();

        }
    }
},

并在 refreshEvents 中调用它

refreshEvents: function(){

    // scroll the parent calendar to the top so we're calculating positions from the base line.
    if(this.calendar.getScrollable()){
        this.calendar.getScrollable().getScroller().scrollTo(0,0);
    }

    this.removeEvents();

    this.getViewModeProcessor().generateEventBars(); // in turn calls this.renderEventBars(this.eventBarStore);

    this.createEventWrapper();

    this.hideOthers();


    if (this.getAllowEventDragAndDrop()) {
        this.createDroppableRegion();
    }
},

现在工作得很好!

于 2013-06-06T03:23:50.683 回答