Backbone.js 主干模型Sync()和$.mockjax()
我正在将现有应用程序的UI从GWT移植到主干网。后端保持不变。后端中的所有请求都由一个端点处理。URL编码的参数确定响应应该是什么。例如:Backbone.js 主干模型Sync()和$.mockjax(),backbone.js,mockjax,Backbone.js,Mockjax,我正在将现有应用程序的UI从GWT移植到主干网。后端保持不变。后端中的所有请求都由一个端点处理。URL编码的参数确定响应应该是什么。例如: http://localhost/adminNPS?request=getDashboard&object=dash&id=2 http://localhost/adminNPS?request=getDashboard&object=dash&id=3 http://localhost/adminNPS?request=sa
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
不要问是谁设计了这个计划。。现在,我必须设计主干模型/集合以连接到此端点,并使用mockjax模拟ajax调用。。所以我现在有两个问题
mockjax
中为此创建模拟调用?使用下面的方法很好。。但需要URL中参数的精确顺序mockjax
的文档状态参数可以与数据:{key:value}
哈希匹配。。但这对我不起作用。。有人能进一步指导我吗
$.mockjax({
url: http://localhost/adminNPS?request=getDashboard&object=dash&id=2,
responseText: { ... }
});
http://localhost/adminNPS?request=getDashboard&object=dash&id=3
获取和http://localhost/adminNPS?request=saveDashboard&object=dash&id=3
保存时关于使用
数据
选项匹配查询参数,这是一个很好的选择。基本上,请求匹配器只处理$.ajax()
调用上的数据对象,而不是查询字符串
也就是说,有两种方法可以解决这个问题:
1) 您可以使用:
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
});
$.mockjax(函数(设置){
//检查“settings.url”,类似于:
// http://localhost/adminNPS?request=getDashboard&object=dash&id=2
var q=settings.url.split('?')[1].split('&');
var data={};//将是查询数据的哈希
对于(var i=0,l=q.length;i,关于使用data
选项匹配查询参数,这是一个。基本上,请求匹配器只处理$.ajax()
调用上的数据对象,而不是查询字符串
也就是说,有两种方法可以解决这个问题:
1) 您可以使用:
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
});
$.mockjax(函数(设置){
//检查“settings.url”,类似于:
// http://localhost/adminNPS?request=getDashboard&object=dash&id=2
var q=settings.url.split('?')[1].split('&');
var data={};//将是查询数据的哈希
对于(var i=0,l=q.length;它支持jakerella的响应。但是核心参数仍然没有得到解决。哪一个正则表达式可以匹配并捕获这两个URL中的请求
和对象
变量值。/adminNPS?request=abc&object=xyz
和/adminNPS?object=xyz&request=abc
。唯一的我的解决方案是:1.定义多个正则表达式排列,并对每个排列进行测试(请求>对象和对象>请求)。2.定义单个正则表达式并确保查询字符串仅包含固定顺序的参数。实际上,如果使用选项(2)在我的回答中,您可以从url提取整个查询字符串,在&
上拆分它,然后查看每个参数以确定是否匹配。我可以更新代码以显示…同意..这当然是一种方式..就像多个正则表达式一样..但在我看来,有点混乱..我的情况下的理想情况是ld是一个单独的正则表达式,它可以捕获所有参数,而不考虑它们的出现顺序。然而,我认为这可能是一厢情愿的想法,可能没有正则表达式可以做到这一点。在这种情况下,您的答案是次优选项。因此正确:)有一个正则表达式可以做到这一点…它非常混乱,可能不太容易维护。基本上,你必须考虑每个位置的每个选项,或者进行前向/后向匹配。同样,可能,但可能不太理想。感谢jakerella的回复。但是核心参数仍然没有得到解决。哪一个正则表达式x可能会匹配并捕获这两个URL中的请求
和对象
变量值。/adminps?request=abc&object=xyz
和/adminps?object=xyz&request=abc
。我唯一的解决方案是:1.定义多个正则表达式排列,并对它们进行测试(request>object和object>request).2.定义单个正则表达式并确保查询字符串仅包含固定顺序的参数。实际上,如果使用选项(2)在我的回答中,您可以从url提取整个查询字符串,在&
上拆分它,然后查看每个参数以确定是否匹配。我可以更新代码以显示…同意..这当然是一种方式..就像多个正则表达式一样..但在我看来,有点混乱..我的情况下的理想情况是ld是一个单独的正则表达式,它可以捕获所有参数,而不考虑它们的出现顺序。然而,我认为这可能是一厢情愿的想法,可能没有正则表达式可以做到这一点。在这种情况下,您的答案是次优选项。因此正确:)有一个正则表达式可以做到这一点……它非常混乱,可能不太容易维护。基本上,你必须考虑每个位置的每个选项,或者进行向后看/向前看匹配。同样,可能,但可能不太理想。