HotTowel - Durandal导航以使用过滤器谓词来查看Breeze作为参数

时间:2013-04-12 14:11:35

标签: breeze single-page-application durandal hottowel

我不清楚如何使用过滤器谓词作为MVC4 SPA HotTowel模板中的参数来导航到新视图的架构。 假设我有一个带有日期(过滤器)下拉列表的主视图和一个导航到Sessions视图的按钮“gotoSessions”。 GoToSessions按钮将导航到Sessions视图,仅显示所选日期的会话。不选择日期将强制会话视图显示所有可用会话。

Home View Screen Added

  1. 更新config.js中的“sessions”路由以接受过滤器参数

    var routes = [{
        url: 'sessions/:filter',
        moduleId: 'viewmodels/sessions',
        name: 'Sessions',
        visible: true,
        caption: '<i class="icon-book"></i> Sessions' }, {... the rest of the routes ..}];
    
  2. 实施“gotoSessions”按钮

     var selectedDate = ko.observable();
    
     var gotoSessions = function(viewData) { 
       if (viewData && viewData.selectedDate) {
          // build filter to pass to Breeze QueryManager as where clause
          var filter = viewData.selectedDate.peek();
    
          // build url with filter parameter
          var url = '#/sessions/' + predicate;
    
          router.navigateTo(url);
       }
    };
    
  3. 在sessions.js viewmodel中,更新activate方法以接受routeData作为参数 并在datacontext.js服务中实现过滤

    var activate = function (context) {
       var filterParam = context.filter;
    
       // update datacontext getSessionsPartials method to accept filter parameter
       return datacontext.getSessionsPartials(sessions, false, filterParam ); 
    };
    
  4. 在services / datacontext.js中更新查询以使用过滤器

    var getSpeakersPartials = function (speakersObservable, forceRemote, filter) { 
    //... code ... 
       var query = EntityQuery.from('Speakers')
         .select('id, firstName, lastName, imageSource')
         .where(... filter here ...)
         .orderBy(orderBy.speaker);
         //... rest of the code...
    };
    
    function getLocal(resource, filtering, ordering) {
       var query;
       if (filtering) {
          query = EntityQuery.from(resource)
               .where('yourPropertyNameHere', 'equals', filtering)
               .orderBy(ordering);
       }
       else {
           query = EntityQuery.from(resource).orderBy(ordering);
       }   
    }
    
  5. 这是MVC4 SPA HotTowel架构的正确实现吗? 你能给出过滤器(谓词)格式化的代码示例吗? 感谢

1 个答案:

答案 0 :(得分:1)

似乎是一个奇怪的用户工作流程,让用户选择日期然后转到页面。为什么不首先进入会话页面,然后选择下拉列表?相同的点击次数,使用户更有意义进入会话,然后选择过滤器。页面可能首先出现没有会话(或全部有分页)。然后选择下拉列表并自动应用过滤器。

如果要将参数传递给视图,可以使用hash标记查询字符串中的:parm语法来执行此操作,但我认为重新考虑UX是更好的选择。