小编Jam*_*rgy的帖子

如何根据输入文本语言自动设置文本方向?

在谷歌,加上(和很多其他地方),我想发布的东西,当我在波斯键入它,这是一个从右到左的语言,文字方向自动设置为RTLtext-alignment:right,当我开始输入英文,它会自动更改为ltrtext-alignment:left.我怎么能有这样的功能?这有什么用HTML5或Javascript?我应该遵循哪些线索?

提前致谢

javascript html5 bidi css3

8
推荐指数
3
解决办法
3998
查看次数

通过隐藏字段传递JSON序列化数据

在ASP.NET WebForms中,我想将任意数据从服务器传递到客户端,然后再传回.我正在序列化为JSON,并且只是生成在客户端上创建对象的JavaScript.使用ajax将数据发送到服务器没有问题,但有些情况下我还想在回发时将Javascript对象数据发送回服务器.所以我想它需要在一个隐藏的领域.

关于这一点的几个一般性问题.

1)在最小化复杂性和优化空间和效率方面,最好的方法是什么?在研究这个时,我发现了Protocol Buffers,但似乎没有一个好的C#实现.我确实找到了一个,但它已经有几年了,自我描述为马车,所以吓到了我.

2)如果我只传递一个JSON字符串,我怎么能确定包含隐藏字段的值是否安全?有什么理由我可能不想这样做吗?我可以使用Base64编码,但似乎这会增加很多开销.什么被认为是最好的或首选的方法?

javascript c# asp.net serialization webforms

7
推荐指数
1
解决办法
2万
查看次数

确定浏览器是否具有拖放能力?

我正在实现jQuery文件上传,并试图找出检测客户端是否可以支持拖放的最佳方法,这样我就可以渲染类似"拖放文件到这里上传"的内容,只有他们能够实际执行此操作.

在插件代码中,我可以看到一个isXHRUploadCapable几乎与拖放支持相关的函数,但我认为这比任何事情更巧合.(它使用iFrames发布上传而不是XMLHTTPRequest上传IE和Opera).如果支持拖放,看不到任何让我知道的东西,所以我怀疑它只是一个事件发生或不发生.

文档说"Windows版本的Safari不支持拖放.MSIE和Opera不支持拖放,多文件选择或上传进度指示." 那么,也许只是Windows版本的Safari支持XMLHTTPRequest上传,但不能拖放?

无论如何 - 我试图找出最好的方法来检测浏览器是否支持使用此插件拖放上传,我不知道如何做到这一点.拖放功能是否可以轻松测试?我该怎么办?这个功能是依赖于浏览器,还是Jquery Upload是否特别支持该浏览器?

jquery drag-and-drop file-upload

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

使用HTML5画布掩盖putImageData?

我想从现有图像中获取不规则形状的部分,并使用HTML5画布将其渲染为Javascript中的新图像.因此,只会复制多边形边界内的数据.我提出的方法涉及:

  1. 在新画布中绘制多边形.
  2. 使用创建掩码 clip
  3. 使用getImageData(矩形)复制原始画布中的数据
  4. 使用将数据应用于新画布 putImageData

它不起作用,整个矩形(例如来自边界外的源的东西)仍然出现.这个问题解释了为什么:"规范说putImageData不会受剪裁区域的影响." 党!

我也尝试绘制形状,设置context.globalCompositeOperation = "source-in",然后使用putImageData.相同的结果:没有应用蒙版.我怀疑是因为类似的原因.

关于如何实现这一目标的任何建议?这是我正在进行的工作的基本代码,以防我不知道自己要做什么.(不要太努力地调试它,它会从使用很多不在这里的函数的代码中清理/提取,只是试图显示逻辑).

 // coords is the polygon data for the area I want
   context = $('canvas')[0].getContext("2d");
   context.save();
   context.beginPath();
   context.moveTo(coords[0], coords[1]);
   for (i = 2; i < coords.length; i += 2) {
     context.lineTo(coords[i], coords[i + 1]);
   }
   //context.closePath();
   context.clip();

   $img = $('#main_image');
   copy_canvas = new_canvas($img); // just creates a new canvas matching dimensions of image
   copy_ctx = copy.getContext("2d");

   tempImage = …
Run Code Online (Sandbox Code Playgroud)

javascript canvas image-processing

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

分配一个函数委托,它将匿名类型返回给变量

以下代码有效:

IEnumerable<SomeThing> things = ...;

// map type SomeThing to a new anonymous type, resulting in a strongly typed 
// sequence based on an anon type

var newList = things.Select(item =>
    {
        return new
        {
            ID = item.ID,
            DateUpdatedOrCreated = ((DateTime)(item.DateUpdated ??
                     item.DateCreated)).ToShortDateString(),
            Total = item.Part1 + item.Part2
        };
    });
Run Code Online (Sandbox Code Playgroud)

newList现在出现在Visual Studio中,IEnumerable<'a>并且强烈键入函数中创建的匿名类型.真是太酷了.

我似乎无法做的是找出一种方法将lambda表达式(而不是枚举)分配给隐式类型变量.即使编译器在上面的上下文中没有匿名类型的问题,如果我尝试(比如说)

var func = (SomeThing item)=> {
        return new { ... };
    };
Run Code Online (Sandbox Code Playgroud)

我收到错误"无法将lambda表达式分配给隐式类型的局部变量".这似乎是一个奇怪的编译限制; 除非我遗漏了某些内容,否则第二个示例中的类型与第一个中的类型一样非模糊:两个类型参数都已明确定义.

有没有办法做到这一点?因为它是一个匿名类型,当然,我没有任何方法可以使用类型来明确地分配它,所以我似乎不会为输出类型创建一个类,如果不是.

更新

在与Jon Skeet的回答开始我的快乐方式之后不久,我发现了一个类似的困境,实例化课程.如果不明显,可以使用相同的技巧使用推断的匿名类型创建强类型类.

class Processor<T,U>
{
    public Processor(Func<T,U> func) { …
Run Code Online (Sandbox Code Playgroud)

c# lambda delegates anonymous-types

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

测试对象是否为任何泛型类型实现通用接口

我想测试一个对象,以确定它实现了IDictionary<TKey,TValue>,但我不在乎什么TKeyTValue有.

我可以测试是否是Dictionary<,>这样的框架的具体实例:

bool isDict = type.IsGenericType && 
    (typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition());
Run Code Online (Sandbox Code Playgroud)

但我想不出一种方法来测试实现的东西IDictionary<,>.这种技术不适用于界面; IsAssignableFrom如果我测试泛型基类型IDictionary<,>,则返回false ,这看起来很奇怪,因为它适用于具体类型.

通常你会is用来测试某些东西是否实现了一个接口,当然这只有在我想测试一个特定的通用接口时才有用.或者我只是测试一个共同的祖先接口,但与其他通用数据结构(如IList<>和)不同ICollection<>,没有通用IDictionary<TKey,TValue>继承的唯一非泛型接口.

c# generics reflection interface

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

在 Typescript 中输入匿名对象而不使用类型断言

考虑:

type Foo = {
   bar: string,
   baz: number
}

const bars = ['a', 'b', 'c'];
const foos = bars.map<Foo>((bar, i) => {
   return {
     bar,
     baz: i
   }
});
Run Code Online (Sandbox Code Playgroud)

不会强制执行地图返回值的确切类型,例如我可以说

return {
  bar,
  baz: i,
  extraProp: 'boo!'    // this works! (bad - i want this to fail)
}
Run Code Online (Sandbox Code Playgroud)

它会正常工作。这与我没有使用泛型类型并在返回值上使用类型断言一样:

return {
  bar,
  baz: i,
  extraProp: 'boo!'   // works (bad)
} as Foo
Run Code Online (Sandbox Code Playgroud)

我能弄清楚要完全强制执行实际类型的唯一方法是创建一个临时变量:

const returnVal: Foo = {
  bar,
  baz: i,
  // extraProp: 'boo!' // won't work …
Run Code Online (Sandbox Code Playgroud)

typescript

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

强制数组在联合类型上是详尽的

给定一个使用此处描述的技术创建的强类型元组:

const tuple = <T extends string[]>(...args: T) => args;
const furniture = tuple('chair', 'table', 'lamp');

// typeof furniture[number] === 'chair' | 'table' | 'lamp'
Run Code Online (Sandbox Code Playgroud)

我想在设计时断言它对另一种联合类型是详尽无遗的:

type Furniture = 'chair' | 'table' | 'lamp' | 'ottoman'
Run Code Online (Sandbox Code Playgroud)

我如何创建一个类型来确保furniture包含联合中的每个类型Furniture

目标是能够在设计时像这样创建一个数组,如果它失败应该Furniture改变;理想的语法可能如下所示:

const furniture = tuple<Furniture>('chair', 'table', 'lamp')
Run Code Online (Sandbox Code Playgroud)

typescript

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

为什么子控制在容器之前初始化?

尽管与WebForms合作多年,我仍然发现自己不时会对事件生命周期感到困惑.这不是一个需要解决的问题,因为希望能够更好地理解为什么事情按照他们的方式运作.

假设你有一个表格:

Default.aspx的:

<form>
  <MyControls:UserControl1 runat="server">
</form>
Run Code Online (Sandbox Code Playgroud)

的UserControl1:ASCX:

<MyControls:UserControl2 runat="server">
Run Code Online (Sandbox Code Playgroud)

OnInit事件发生顺序如下:

UserControl2_OnInit
UserControl1_OnInit
Default_OnInit
Run Code Online (Sandbox Code Playgroud)

这不仅仅是低音吗?Init代码不应该按照创建控件的顺序运行吗?在OnInit运行之前,父控件是否不能初始化子属性?也就是说,虽然您可以在标记中初始化子控件的属性,但是没有直接的方法让父控件能够动态设置可用于其OnInit事件的子控件的属性.

我最终做的是这样的事情:

override void UserControl2_OnInit()
{
    NamingContainer.OnInit += new EvenHandler(UserControl1_ActualInit);
}
protected void UserControl2_ActualInit(..) {
  // do actual init code here, which will occur before OnLoad but after it's parent
  // OnInit
}
Run Code Online (Sandbox Code Playgroud)

所以这不是一个不可逾越的问题.我只是不明白为什么它首先是一个问题.

我意识到也许您可能希望能够在OnInit代码中初始化所有子控件.很好,你应该能够首先调用base.OnInit,而不是之后,你自己的初始化代码,这应该导致所有的子控件OnInit事件运行.但事件生命周期不起作用.Init事件不是递归链接的,它们似乎独立地运行父事件,而最里面的事件总是首先运行.但是,如果它们简单地以链接方式链接,那么生活会变得容易得多,所以你可以在任何特定情况下做之前调用基本事件(或不是).有什么我想念的东西会使这种看似违反直觉的情况变得可取甚至是必要的吗?

asp.net webforms page-lifecycle

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

观看房产创建活动?

我需要能够确定何时创建对象(不是DOM元素 - 一个javascript对象).

这个问题的答案有一些用于创建可观察属性的非常有用的代码,因此您可以在属性更改时触发函数.

在我的情况下,我需要在创建对象/属性时执行某些操作,而不是更改现有属性,并且我对这些事项的有限理解无法帮助我弄清楚是否或如何使用该代码在经过多次眯眼之后执行此操作.

情况是:页面加载了一堆脚本.一些脚本创建了其他脚本所需的东西,例如:

ThisStuff = (function () {
  // blah blah
   return self;
} ());
Run Code Online (Sandbox Code Playgroud)

一些其他代码需要初始化它ThisStuff,只要它可用,这可能是在DOM完成加载之后.用户实际上并不需要ThisStuff马上使用,因此只要脚本完成加载就可以发生.所以我想按照以下方式做一些事情:

$(document).ready(function() {
   wheneverIsAvailable(window,'ThisStuff', function(object) {
       object.init(args);
   })
});
Run Code Online (Sandbox Code Playgroud)

我意识到这个问题还有其他解决方案(更改脚本顺序,或按需加载脚本),但由于体系结构,这些很难.所以我只对与其他解决方案相比的方法感兴趣.如果jQuery提供了一些这样的功能,那我也可以使用它.

javascript jquery javascript-events

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