我一直在完成清理控制器代码的过程,以使每个操作都可测试.一般来说,这并不是太困难 - 我们有机会使用固定对象,比如说FormsAuthentication,我们通常会在适当的时候引入某种形式的包装器并且是我们喜欢的方式.
由于没有特别与此对话密切相关的原因,在处理HttpContext的使用时,我们决定使用新创建的HttpContextWrapper类而不是发明自己开发的东西.我们介绍的一件事是能够交换HttpContextWrapper(比如说,用于单元测试).这完全受到Oren Eini使用DateTimes处理单元测试的方式的启发(参见文章,我们也使用的模式)
public static class FooHttpContext
{
public static Func<HttpContextWrapper> Current = ()
=> new HttpContextWrapper(HttpContext.Current);
public static void Reset()
{
Current = () => new HttpContextWrapper(HttpContext.Current);
}
}
Run Code Online (Sandbox Code Playgroud)
没什么特别的花哨.它在我们的控制器代码中运行得很好.当我们去编写单元测试时,就会出现这个问题.我们使用Moq作为我们的模拟框架,但是唉
var context = new Mock<HttpContextWrapper>()
Run Code Online (Sandbox Code Playgroud)
因为HttpContextWrapper没有无参数的ctor,所以会中断.作为ctor参数需要什么?一个HttpContext对象.所以我发现自己陷入困境22.
我正在使用规定的方法来解耦HttpContext - 但我无法模拟一个值,因为原始的HttpContext对象是密封的,因此很难测试.我可以映射HttpContextBase,它们都来自 - 但这并没有真正让我得到我想要的东西.我是否只是忽略了HttpContextWrapper的某个方面?
编辑以澄清意图
我们找到了解决问题的方法 - 但我想我们最终要解决的问题是HttpContextWrapper给表带来了什么价值?我不怀疑某个人完全有一个哈哈!它的时刻,但它不会来找我.我在这里看到的大多数帖子都在可测试性方面进行了讨论 - 但是我自己的经验让我相信它并没有带来太大的影响.除非我们做错了.(完全可能).
以下假设是否准确?
1)立即执行
(function(){
})();
Run Code Online (Sandbox Code Playgroud)
2)执行文件就绪
$(document).ready(function(){
});
Run Code Online (Sandbox Code Playgroud)
3)准备好文件的简写
$(function(){
});
Run Code Online (Sandbox Code Playgroud)
4)准备文件的替代速记,以避免交叉脚本冲突
(function($) {
})(jQuery);
Run Code Online (Sandbox Code Playgroud) 做AJAX的首选方法是什么?
如果是使用Jquery为AJAX编写的用PHP编写的搜索页面
你会如何处理响应?
a)让响应包含所有相关的html /样式
要么
b) 发送纯JSON并使用javascript函数构建围绕javascript变量的html /样式.
我可以看到两者都有优势.'a'显然更容易,而'b'更有效(尽管gzip可能会使差异可以忽略不计).
我想知道如何渲染一个div可点击(就像一个链接,当我用鼠标移动时用小手).
我有一些像这样的元素:
<div class="teamSelector">Some</div>
Run Code Online (Sandbox Code Playgroud)
有了这个jQuery:
$('.teamSelector').click(function() {
// some functions
});
Run Code Online (Sandbox Code Playgroud)
干杯
我试图在我无法改变html标记的环境中选择第一个兄弟的内部值 - 使用jQuery.
我有以下内容:
<tr>
<td>3</td>
<td>bob</td>
<td>smith</td>
<td>bob@example.com</td>
<td>
<img src="bobsmith.png" onclick="doSomething()" />
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我试图通过以下方式获得第一个的值<td>:
function doSomething() {
var temp = $(this).parent().parent().children().filter(':first');
alert("you clicked person #" + temp.html());
}
Run Code Online (Sandbox Code Playgroud)
我从中得到的只是null.
我也尝试了与.siblings()功能的各种组合,但无济于事.
有任何想法吗?
谢谢,
注意:我忘了提到摘录的表是从ajax调用动态加载和刷新的.这可能与包含绑定的建议相关.
解决方案: 我已经接受了以下解决方案,受到接受的答案的启发:
<tr>
<td>3</td>
<td>bob</td>
<td>smith</td>
<td>bob@example.com</td>
<td>
<img src="bobsmith.png" onclick="doSomething(this)" />
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
并为jQuery javascript:
function startStopNode(el) {
var temp = $(el).parent().siblings(':first').html();
alert("you clicked: " + temp);
}
Run Code Online (Sandbox Code Playgroud) 我查看了文档,但我一直无法找到答案.有没有办法防止选中时突出显示行?那甚至是一种阻止行被选中的方法.我喜欢"hoverrows:true"选项,但理想情况下我想停止选择点击一行.
谢谢,
更新: 我已经能够"hackily"实现一些似乎是临时修复的东西.我根本不喜欢它,如果有一个,我希望能有更好的解决方案......
我发现如果我通过了选项
onSelectRow: function(rowid, status) {
$('#'+rowid).removeClass('ui-state-highlight');
}
Run Code Online (Sandbox Code Playgroud)
当我实例化jqGrid时,我可以在添加时删除突出显示.
还有另一种更理想的方法吗?
我正在从头开始创建我的网站的移动版本,但我不确定我应该使用哪种doctype.似乎没有一个明确的标准是真的吗?
在许多移动网站上,我看到:
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">
Run Code Online (Sandbox Code Playgroud)
在其他人身上我发现:
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的移动网页设计方向吗?
我想支持大多数现代手持设备,如iPhone和HTC设备
我想一个好的分辨率使用最大320*480!
谢谢你的协助
显然,此调用window.open在Internet Explorer下无效.我的网站上的Javascript代码没有运行,我认为这是由于该错误.
它告诉我错误是打开的,是对window.open的调用,显然一个参数在那里是无效的.
$('.objeto').click(
function() {
var center = 'height=380,width=900,top='+((screen.width - 900)/2)+',left='+((screen.height - 380)/2);
var address = $(this).attr('id');
window.open (address,'Ver articulo', config=center);
}
);
Run Code Online (Sandbox Code Playgroud)
该网站在Google Chrome和Firefox下运行良好.
我有以下滚动脚本,滚动页面很好,工作正是我想要的.
$(function(){
$('a[href*=#]').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'')
&& location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
if ($target.length) {
var targetOffset = $target.offset().top;
$('html,body').animate({scrollTop: targetOffset}, 1000);
return false;
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
但是,我需要它忽略顶部说200px,因为我在页面顶部有一个固定的标题,内容滚动后面.
这意味着,当我滚动到顶部时,它将内容滚动到固定标题后面,所以我看不到它,所以我需要它滚动到标题下方..所以将标题的底部视为浏览器的顶部我假设....
可以这样做,因为它会非常方便吗?
非常感谢任何帮助
<div class="selectedColumns" >
<a href="#" attributeid="19" >Driver License State</a>
<a href="#" attributeid="21" >Email</a>
<a href="#" attributeid="23" >Experience Level</a>
<a href="#" attributeid="26" >First Name</a>
<a href="#" attributeid="71" >Is Account Enabled</a>
<a href="#" attributeid="39" >Last Contacted Date</a>
<a href="#" attributeid="40" >Last Name</a>
<a href="#" attributeid="41" >Middle Name</a>
<a href="#" attributeid="6">Carrier</a>
</div>
Run Code Online (Sandbox Code Playgroud)
我有一系列链接.每个链接都有一个attributeid属性.我想按属性值过滤.所以在上面的链接中如果我的值为41,它将返回中间名链接.
var link = $('.selectedColumns a:[attributeid==' + $(this).val() + ']');
Run Code Online (Sandbox Code Playgroud)
这没用?
jquery ×8
javascript ×5
html ×4
jquery-1.3.2 ×2
abstraction ×1
ajax ×1
attributes ×1
c# ×1
css ×1
doctype ×1
dom ×1
filter ×1
iphone ×1
jqgrid ×1
json ×1
mobile ×1
mocking ×1
siblings ×1
window.open ×1