1

我正在将现有应用程序的 UI 从 GWT 移植到 Backbone。后端保持不变。后端的所有请求都由单个端点处理。URL 编码的参数决定了响应应该是什么。例如:

http://localhost/adminNPS?request=getDashboard&object=dash&id=2
http://localhost/adminNPS?request=getDashboard&object=dash&id=3
http://localhost/adminNPS?request=saveDashboard&object=dash&id=1 ... {json}
http://localhost/adminNPS?request=getUser&object=user
http://localhost/adminNPS?request=createUser&object=user ... {json}
http://localhost/adminNPS?request=getUserPermissions&object=user

不要问谁设计了这个方案 =P.. 现在,我必须设计 Backbone Models / Collections 来连接到这个端点,并使用 mockjax 来模拟​​ ajax 调用。所以我现在有两个问题。

  1. 如何为此创建模拟调用mockjax?使用以下内容可以正常工作..但需要 URL 中参数的精确顺序..mockjax的文档状态参数可以与data: { key: value }哈希匹配..但这对我不起作用..有人可以进一步指导我吗?

    $.mockjax({
        url: http://localhost/adminNPS?request=getDashboard&object=dash&id=2,
        responseText: { ... }
    });
    
  2. 模型应该如何编码,例如,DashboardModelhttp://localhost/adminNPS?request=getDashboard&object=dash&id=3在获取和http://localhost/adminNPS?request=saveDashboard&object=dash&id=3保存时访问..

4

1 回答 1

1

关于使用该data选项匹配查询参数,这是Mockjax 中记录的错误。基本上,请求匹配器仅适用于$.ajax()调用中的数据对象,而不适用于查询字符串。

也就是说,有两种方法可以处理这个问题:

1)您可以使用匹配器的正则表达式版本url

$.mockjax({
  url: /adminNPS?request=[^&]+&object=[^&]+&id=[0-9]+/i, // tweak to your needs
  ...
});

2)或者你可以通过传入一个函数来使用完全自定义的匹配能力:

$.mockjax(function(settings) {
  // examine `settings.url` which would be something like:
  // http://localhost/adminNPS?request=getDashboard&object=dash&id=2

  var q = settings.url.split('?')[1].split('&');
  var data = {}; // will be a hash of the query data
  for (var i=0, l=q.length; i<l; ++i) {
    data[q[i].split('=')[0]] = q[i].split('=')[1];
  }

  // Now you can look at the `data` object to do your matching

  if ( /* the URL matches what you want */ ) {
    return {
      response: function () {
        this.responseText = { ... }; /* whatever you want the response to be */
      }
    };
  }
  return; // no match
});

更新以显示您如何调查查询字符串...

于 2014-08-20T20:54:16.217 回答