2012-04-03 82 views
1

我想先说我已经阅读Rally Kanban - hiding Epic Stories,但是我仍然在实施基于估算板应用程序的过滤器过程的过滤器时遇到问题。目前我正在尝试为我的纸板的查询对象添加一个项目过滤器。查询对象调用this._getItems以返回要过滤的项目数组。据我可以告诉查询调用该函数,加载一秒钟或两秒钟,然后显示没有结果。欢迎任何意见,建议或替代解决方案。从看板董事会过滤史诗

这里是我的代码

$that._redisplayBoard = function() { 


      that._getAndStorePrefData(displayBoard); 

      this._getItems = function(callback) { 

      //Build types based on checkbox selections 
      var queries = []; 

        queries.push({key:"HierarchicalRequirement", 
         type: "HierarchicalRequirement", 
         fetch: "Name,FormattedID,Owner,ObjectID,Rank,PlanEstimate,Children,Ready,Blocked", 
         order: "Rank" 

        }); 



      function bucketItems(results) { 
       var items = []; 

       rally.forEach(queries, function(query) { 
        if (results[query.key]) { 
         rally.forEach(results[query.key], function(item) { 
          //exclude epic stories since estimates cannot be altered 
          if ((item._type !== 'HierarchicalRequirement') || 
            (item._type === 'HierarchicalRequirement' && item.Children.length === 0)) { 
           items = items.concat(item); 

          } 
         }); 
     } 
       }); 


       callback(items); 
       } 

       rallyDataSource.findAll(queries, bucketItems); 

      }; 

      function displayBoard() { 

       artifactTypes = []; 



       var cardboardConfig = { 

        types: [], 

        items: that._getItems, 

        attribute: kanbanField, 

        sortAscending: true, 

        maxCardsPerColumn: 200, 

        order: "Rank", 

        cardRenderer: KanbanCardRenderer, 

        cardOptions: { 

         showTaskCompletion: showTaskCompletion, 

         showAgeAfter: showAgeAfter 

        }, 

        columnRenderer: KanbanColumnRenderer, 

        columns: columns, 

        fetch: "Name,FormattedID,Owner,ObjectID,Rank,Ready,Blocked,LastUpdateDate,Tags,State,Priority,StoryType,Children" 

       }; 



       if (showTaskCompletion) { 

        cardboardConfig.fetch += ",Tasks"; 

       } 



       if (hideLastColumnIfReleased) { 

        cardboardConfig.query = new rally.sdk.util.Query("Release = null").or(kanbanField + " != " + '"' + lastState + '"'); 

       } 



       if (filterByTagsDropdown && filterByTagsDropdown.getDisplayedValue()) { 

        cardboardConfig.cardOptions.filterBy = { field: FILTER_FIELD, value: filterByTagsDropdown.getDisplayedValue() }; 

       } 



       cardboardConfig.types.push("HierarchicalRequirement"); 



       if (cardboard) { 

        cardboard.destroy(); 

       } 



       artifactTypes = cardboardConfig.types; 






       cardboard = new rally.sdk.ui.CardBoard(cardboardConfig, rallyDataSource); 




       cardboard.addEventListener("preUpdate", that._onBeforeItemUpdated); 
       cardboard.addEventListener("onDataRetrieved", function(cardboard,args){ console.log(args.items); }); 

       cardboard.display("kanbanBoard"); 

      } 

     }; 


     that.display = function(element) { 



      //Build app layout 

      this._createLayout(element); 



      //Redisplay the board 

      this._redisplayBoard(); 

     }; 

    }; 

回答

0

当cardboard.setItems(filteredItems)被调用时,Mark的回答引起了一个模糊的崩溃。但是,由于过滤代码实际上是在处理实际引用,因此实际上并不需要setItems()方法。我把它拉出来,现在它过滤得当。

+0

好抓!我编辑了我的答案以反映你的发现。 – 2012-04-05 06:18:29

+0

我不确定是否正确的堆栈溢出礼节将其标记为答案,但我没有足够的代表upvote,所以你去了。 – user1145893 2012-04-05 12:16:44

0

不知道这是你的问题,但你的纸板的配置不设置“查询”字段。 fetch是要检索的所有数据的类型,如果要过滤它,请向配置对象添加“query:”值。 喜欢的东西:

 var cardboardConfig = { 
     types: ["PortfolioItem", "HierarchicalRequirement", "Feature"], 
     attribute: dropdownAttribute, 
     fetch:"Name,FormattedID,Owner,ObjectID,ClassofService", 
     query : fullQuery, 
     cardRenderer: PriorityCardRenderer 
    }; 

在哪里可以使用拉力查询对象来构建fullQuery。您可以通过在SDK中搜索来找到它。希望这可能有所帮助。

+0

应该将fullQuery放在引号中吗?当我按原样添加查询时,看板无法显示。当我添加引号时,它会加载,但仍然没有响应。 – user1145893 2012-04-04 12:29:20

1

Charles'一丝Rally Kanban - hiding Epic Stories

以下是我走近这个以下查尔斯的提示造势目录看板。首先,修改cardboardConfig内取语句,以便它包括儿童的收集,正是如此:

 fetch: "Name,FormattedID,Children,Owner,ObjectID,Rank,Ready,Blocked,LastUpdateDate,Tags,State" 

接下来,在此声明之间:

 cardboard.addEventListener("preUpdate", that._onBeforeItemUpdated); 

而且这样的说法:

 cardboard.display("kanbanBoard"); 

添加以下事件侦听器和回调:

cardboard.addEventListener("onDataRetrieved", 
     function(cardboard, args){ 
      // Grab items hash 
      filteredItems = args.items; 

      // loop through hash keys (states) 
      for (var key in filteredItems) { 

       // Grab the workproducts objects (Stories, defects)     
       workproducts = filteredItems[key]; 
       // Array to hold filtered results, childless work products 
       childlessWorkProducts = new Array(); 
       // loop through 'em and filter for the childless 
       for (i=0;i<workproducts.length;i++) { 
        thisWorkProduct = workproducts[i];      
        // Check first if it's a User Story, since Defects don't have children 
        if (thisWorkProduct._type == "HierarchicalRequirement") { 
         if (thisWorkProduct.Children.length === 0) { 
          childlessWorkProducts.push(thisWorkProduct); 
         } 
        } else { 
         // If it's a Defect, it has no children so push it 
         childlessWorkProducts.push(thisWorkProduct); 
        } 
       } 
       filteredItems[key] = childlessWorkProducts; 
      } 
      // un-necessary call to cardboard.setItems() was here - removed 
     } 
    ); 

此回调应该只筛选叶节点项目。

+0

非常感谢你,这开始让我疯狂! – user1145893 2012-04-05 12:15:28