【问题标题】:HotTowel - Durandal navigation to view with filter predicate to Breeze as parameterHotTowel - 以 Breeze 作为参数的过滤谓词查看 Durandal 导航
【发布时间】:2013-04-05 02:41:57
【问题描述】:

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

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

    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. 在 session.js 视图模型中更新 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);
       }   
    }
    

这是 MVC4 SPA HotTowel 架构的正确实现吗? 您能否提供过滤器(谓词)格式的代码示例? 谢谢

【问题讨论】:

  • 看起来内联过滤器在这种情况下比使用谓词对象更好。 EntityQuery.fromEntities(customers) .where("Region", FilterQueryOp.NotEquals, null);

标签: breeze single-page-application durandal hottowel


【解决方案1】:

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

如果您想将参数传递给视图,您可以使用哈希标记查询字符串中的 :parm 语法来实现,但我认为重新考虑 UX 是一个更好的选择。

【讨论】:

  • 我同意。该问题适用于 Code Camper 示例,但没有多大意义。对不起。我真的很想知道如何将参数传递给视图。
  • 知道了。我在底部提到您可以使用 :parameter 语法。
猜你喜欢
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多