在Javascript中为Sencha Touch Ext.ux.TouchCalendar更改对象结构数组

时间:2013-06-06 00:39:42

标签: javascript arrays object extjs sencha-touch

我正在构建一个使用了很棒的日历插件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

这样的事情

提前致谢

1 个答案:

答案 0 :(得分: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();
    }
},

现在工作得很好!