问题列表 - 第38342页

如何设计我的C#jQuery API,使其不会混淆使用?

我正在为C#制作一个jquery克隆.现在我已经设置好了,所以每个方法都是一个扩展方法,IEnumerable<HtmlNode>所以它适用于已经使用的现有项目HtmlAgilityPack.我以为我可以在不保留状态的情况下离开...然而,我注意到jQuery有两种方法.andSelf,.end它们会从内部堆栈"弹出"最近匹配的元素.如果我改变我的类以便它总是在SharpQuery对象上运行而不是枚举,我可以模仿这个功能,但是仍然存在问题.

使用JavaScript,您可以自动获得Html文档,但在使用C#时,您必须明确加载它,如果需要,您可以使用多个文档.看来,当你打电话给$('xxx')你时,你实际上是在创建一个新的jQuery对象,并以空堆栈开始.在C#中,您不希望这样做,因为您不想从Web重新加载/重新获取文档.因此,您只需将其加载到SharpQuery对象中,或加载到HtmlNodes列表中(您只需要开始使用DocumentNode).

在jQuery文档中,他们给出了这个例子

$('ul.first').find('.foo')
  .css('background-color', 'red')
.end().find('.bar')
  .css('background-color', 'green')
.end();
Run Code Online (Sandbox Code Playgroud)

我没有初始化方法因为我不能重载()运算符,所以你只需要开始sq.Find(),它在文档的根目录上操作,基本上做同样的事情.但是后来人们会尝试sq.Find()在一条线上写字,然后在sq.Find()某个地方写下来,并且(理所当然地)期望它再次在文档的根部运行......但是如果我保持状态,那么你就是刚刚在第一次调用后修改了上下文.

那么......我应该如何设计我的API?我是否添加了另一个Init方法,所有查询应该从重置堆栈开始(但是我如何强制它们从那开始呢?),或者添加一个Reset()他们必须在他们的行尾调用的方法?我是否超载[]而告诉他们从那开始?我会说"忘记它,没有人使用那些保存状态的功能吗?"

基本上,您希望如何用C#编写jQuery示例?

  1. sq["ul.first"].Find(".foo") ...
    垮台:虐待[]财产.

  2. sq.Init("ul.first").Find(".foo") ...
    失败:除非我添加一些奇怪的"初始化"机制,否则没有什么能真正迫使程序员从Init开始; 用户可能会尝试使用.Find而不是获得他期望的结果.此外,InitFind是几乎相同的,无论如何,除了前者把堆栈复位了.

  3. sq.Find("ul.first").Find(".foo") ... .ClearStack()
    垮台:程序员可能忘记清理堆栈.

  4. 不能这样做.
    end()未实现.

  5. 使用两个不同的对象.
    也许HtmlDocument用作所有查询应该开始的基础,然后每个方法返回一个SharpQuery可以链接的对象.这样,HtmlDocument始终保持初始状态,但SharpQuery对象可能具有不同的状态.遗憾的是,我必须实现两次(一次用于HtmlDocument,一次用于SharpQuery对象).

  6. new SharpQuery(sq).Find("ul.first").Find(".foo") ...
    构造函数复制对文档的引用,但重置堆栈.

c# interface-design jquery html-agility-pack

5
推荐指数
1
解决办法
378
查看次数

是否有任何工具/库(.Net/WPF)来测量和存储用于分析的UI导航数据?

我想在UI中测量和分析用户移动和手势,以优化应用程序用户体验.我曾想过功能跟踪库(如EQATEC或Preemptive的运行时智能)会允许这样做.但是,情况似乎并非如此.

理想情况下,我希望能够设置UI,然后通过热图捕获鼠标和键盘导航手势.

我的搜索空洞了.这里有OSS或商业广告吗?

.net wpf usage-tracking

18
推荐指数
2
解决办法
1301
查看次数

在Delphi中枚举可能的设置值

我在Delphi中有一个计算算法,有许多不同的选项,我需要尝试每个选项组合来找到最佳解决方案.

TMyOption = (option1, option2, option3, option4);
TMyOptions = set of TMyOption;
Run Code Online (Sandbox Code Playgroud)

我想知道使用Integer循环枚举它们:

for EnumerationInteger := 0 to 15 do begin
    Options := TMyOptions(EnumerationInteger);
end;
Run Code Online (Sandbox Code Playgroud)

这不编译.我想知道的是,是否有任何相当简单的方法可以从Integer转换为Set(Web上的大多数问题都试图从另一个方向转换,从Set到Integer),如果是这样,它是什么?

另一种可能性是将Integer用作位域:

C_Option1 = 1;
C_Option2 = 2;
C_Option3 = 4;
C_Option4 = 8;
Run Code Online (Sandbox Code Playgroud)

然后按位测试成员资格:

if (Options and C_Option2) > 0 then begin
    ...
end;
Run Code Online (Sandbox Code Playgroud)

我已经尝试了这个,并且它可以工作,但感觉就像使用集合会更自然并且更好地使用类型系统(即使我要在所述类型系统外部枚举集合).

有没有比枚举基础整数表示更好/更安全地枚举所有可能的集合组合?

笔记:

  1. 我知道理论上不保证集合的整数值(尽管如果你不使用枚举编号,我怀疑它们在实践中).
  2. 可能有四个以上的选项(是的,我知道它会以指数方式增长,如果有太多选项,算法可能会永远占用).

delphi set

6
推荐指数
2
解决办法
4798
查看次数

保护登录后面的整个网站即"授权"所有控制器内的所有操作

标题几乎说明了一切.

我有一个只会在登录后运行的网站,所以我想确保除非您已登录,否则无法访问任何内容.这包括ActionResults,JsonResults等...

目前,我的[Authorize]所有控制器都非常繁琐,而且不是很干燥 :)

那么我可以使用1行神奇的代码来保护整个网站吗? (显然需要访问登录页面)

此外,请注意我仍然需要进一步保护某些操作仅供某些用户/角色使用

c# security model-view-controller asp.net-mvc authorization

3
推荐指数
1
解决办法
1567
查看次数

Xcode警告:"属性'<x>'及其超类'<y>'没有匹配的'原子'属性"

在编译几个现有Cocoa类的子类时,我收到了Xcode警告.例如,以下类

   @interface HMAttitude : CMAttitude
    {
        double pitch;
        double roll;
        double yaw;
    }

    @property (readwrite) double pitch;
    @property (readwrite) double roll;
    @property (readwrite) double yaw;

    @end
Run Code Online (Sandbox Code Playgroud)

-

@implementation HMAttitude

@synthesize pitch, roll, yaw;

- (id) init
{
    return [super init];
}

@end
Run Code Online (Sandbox Code Playgroud)

产生三个警告

警告:属性'yaw'及其超类'CMAttitude'没有匹配的'atomic'属性

警告:属性'pitch'及其超类'CMAttitude'没有匹配的'atomic'属性

警告:属性'roll'及其超类'CMAttitude'没有匹配的'atomic'属性

所有子类都是必需的,以便创建能够像超类一样运行的CMMotionManager和CLLocationManager子类,只加载来自csv文件的数据.我将它们子类化的唯一原因是获得访问(或覆盖)其只读属性.如果没有设置这些属性的能力,我无法返回与真实CMMotionManager和CLLocationManager类相同的对象.

目前一切正常,除了必须使用#pragma忽略稍微困扰我的警告.

有谁知道为什么会产生这个警告?鉴于属性未设置为非原子(原子是默认值),我绝对没有线索.

为了使这些属性成为原子,我需要明确做些什么吗?

xcode objective-c gcc-warning

1
推荐指数
1
解决办法
674
查看次数

处理重叠的jQuery可排序列表

这是一个不起眼的问题,但我正在使用jQuery Sortables并试图让两个连接列表很好地协同工作fixed.一切正常,直到你滚动页面,使两个列表最终位于彼此的顶部.然后列表似乎对哪一个应该接收被拖动的项目感到困惑,这意味着当每个列表中出现/消失时,会发生一堆抖动.

看起来问题是两个列表都在处理鼠标/排序事件,因为被拖动的项目在技术上是在两个列表上,但我想要的是让覆盖列表(即position: fixed一个)吞下事件以便底层主要列表不会尝试接收该项目.

这是最小的代码示例:

<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"></script>
    <style type="text/css">
        ul { list-style-type: none; padding: 0; float: left; }
        li { margin: 5px; padding: 5px; width: 500px; border: solid 1px #F00; background-color: #FFF; }
        #overlayed { position: fixed; top: 0; background-color: #000; margin: 20px; padding: 10px; }
        #overlayed li { width: 50px; float: left; }
    </style>
    <script type="text/javascript">
        $(function() {
            $("ul").sortable({ connectWith: "ul", opacity: 0.6 }).disableSelection();
        });
    </script>
</head>
<body>
<div …
Run Code Online (Sandbox Code Playgroud)

javascript jquery drag-and-drop fixed jquery-ui-sortable

9
推荐指数
1
解决办法
6530
查看次数

JSF2忽略空的alt属性

我有一个jsf片段:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets">
<!-- Yandex.Metrika -->
<img src="//mc.yandex.ru/watch/xxx" alt=""/>
<!-- /Yandex.Metrika -->
</ui:composition>
Run Code Online (Sandbox Code Playgroud)

但是当我使用它时,web-client在img元素中获取HTML页面而没有空的alt属性:

<!-- Yandex.Metrika -->
<img src="//mc.yandex.ru/watch/xxx" />
<!-- /Yandex.Metrika -->
Run Code Online (Sandbox Code Playgroud)

结果我的文档有验证错误(

我怎么解决这个问题?

image alt jsf-2 glassfish-3

6
推荐指数
1
解决办法
748
查看次数

表示分钟、秒、毫秒的 varchar 或十进制数据类型

我有一个 MySQL 数据库表,其中包含跨国跑步时间。我正处于岔路口,询问是否应该将运行时间的当前数据类型(varchar)转换为十进制。

varchar 数据类型吸引我的一个方面是,我不必将传入的运行结果(通过 php 脚本解析)转换为秒,然后在动态检索时再转换回来。我的处理脚本确保每次都是 8 个字符长,除非运动员 DNF(未完成),这也是我想要存储的信息。DNF 在结果中显示为“DNF”。

那么运行时间应该存储为17:40.57还是1060.57呢?各自的优点和缺点是什么?是否有比我已经假定的正确类型更好的数据类型?

另外,如果您选择 1060.57 作为答案,那么我将如何逻辑存储 DNF 或 DNS?

mysql sql time types

4
推荐指数
1
解决办法
6019
查看次数

写入C中的给定void*内存位置

我有一个函数,它的参数之一是"void*buffer".在这个函数中,我需要写入该内存位置.但是,做类似的事情

*buffer = "Hello\0Hi\0";
Run Code Online (Sandbox Code Playgroud)

不起作用,因为我无法取消引用void*指针.如何将字符串数据放入该内存位置?请注意,我需要复制数据,不一定是字符串,因为它可能包含空字符.

更新以反映strcpy是不够的

c pointers

1
推荐指数
1
解决办法
388
查看次数

Haskell中的尾递归

我试图理解Haskell中的尾递归.我想我明白它是什么以及它是如何工作的但是我想确保我没有搞砸了.

这是"标准"因子定义:

factorial 1 = 1
factorial k = k * factorial (k-1)
Run Code Online (Sandbox Code Playgroud)

例如,在运行时,factorial 3我的函数会自行调用3次(给它或者拿它).如果我想计算因子99999999,这可能会产生问题,因为我可能有堆栈溢出.在我到达之后,factorial 1 = 1我将不得不在堆栈中"返回"并将所有值相乘,因此我有6个操作(3个用于调用函数本身,3个用于乘以值).

现在我向您介绍另一种可能的因子实现:

factorial 1 c = c
factorial k c = factorial (k-1) (c*k)
Run Code Online (Sandbox Code Playgroud)

这个也是递归的.它会称自己为3次.但它没有问题,然后仍然必须"回来"计算所有结果的乘法,因为我已经将结果作为函数的参数传递.

根据我的理解,这就是Tail Recursion的内容.现在,它似乎比第一个好一点,但你仍然可以轻松地拥有堆栈溢出.我听说Haskell的编译器会在后台将Tail-Recursive函数转换为for循环.我想这就是为什么它能够为尾递归功能付出代价呢?

如果这就是原因,那么如果编译器不打算做这个聪明的技巧,那么绝对没有必要尝试使函数尾递归 - 我是对的吗?例如,虽然理论上C#编译器可以检测并将尾递归函数转换为循环,但我知道(至少是我所听到的)目前它没有这样做.所以现在绝对没有必要使函数尾递归.是吗?

谢谢!

recursion haskell tail-recursion

18
推荐指数
2
解决办法
8163
查看次数