小编Jos*_*osh的帖子

可以在运行时(或重用)替换ES6模板文字吗?

tl; dr:是否可以制作可重复使用的模板文字?

我一直在尝试使用模板文字,但我想我只是没有得到它,现在我感到沮丧.我的意思是,我认为我得到它,但"它"不应该是它如何工作,或它应该如何得到.应该有所不同.

我看到的所有示例(甚至是标记模板)都要求"替换"在声明时而不是运行时完成,这对我来说对于模板来说似乎完全没用.也许我很疯狂,但对我来说,一个"模板"是一个包含令牌的文档,当你使用它时,它们会被替换,而不是在你创建它时,否则它只是一个文档(即一个字符串).模板与令牌一起存储为令牌,当您评估它们时,将评估这些令牌.

每个人都引用了一个可怕的例子,类似于:

var a = 'asd';
return `Worthless ${a}!`
Run Code Online (Sandbox Code Playgroud)

这很好,但如果我已经知道a,我会return 'Worthless asd'或者return 'Worthless '+a.重点是什么?认真.好吧,重点是懒惰; 更少的优点,更多的可读性.大.但那不是模板!不是恕我直言.MHO就是最重要的!问题,恕我直言,模板在声明时被评估,所以,如果你这样做,恕我直言:

var tpl = `My ${expletive} template`;
function go() { return tpl; }
go(); // SPACE-TIME ENDS!
Run Code Online (Sandbox Code Playgroud)

由于expletive未声明,因此输出类似的内容My undefined template.超.实际上,至少在Chrome中,我甚至无法声明模板; 它会抛出错误,因为expletive没有定义.我需要的是能够在声明模板后进行替换:

var tpl = `My ${expletive} template`;
function go() { return tpl; }
var expletive = 'great';
go(); // My great template
Run Code Online (Sandbox Code Playgroud)

但是,我不知道这是如何可能的,因为这些不是真正的模板.即使你说我应该使用标签,nope,它们也不起作用:

> explete = function(a,b) { console.log(a); …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 template-literals

98
推荐指数
13
解决办法
3万
查看次数

我只应该有一个Bootstrap 3容器吗?

我正在试图找出Bootstrap 3并且遇到很多麻烦.Bootstrap 3网站说:

通过将其内容包装在.container中,轻松地将页面内容居中.容器在各种媒体查询断点处设置宽度以匹配我们的网格系统.

请注意,由于填充和固定宽度,容器默认情况下不可嵌套.

前一行似乎支持这一点,因为我不希望嵌套容器将宽度重新设置为超过父级.后一行让我觉得我应该在页面上只有一个容器(或者最多只有兄弟姐妹),不管流体/正常/等等,而不做"额外"的事情.

那是对的吗?

twitter-bootstrap twitter-bootstrap-3

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

在保留道具的同时扩展React和TypeScript中的HTML元素

我只是无法绕过这个我想,我已经尝试了大概六次并总是求助于any...是否有合法的方式从HTML元素开始,将其包装在组件中,并将其包装在另一个组件中,HTML道具通过一切?基本上自定义HTML元素?例如,类似于:

interface MyButtonProps extends React.HTMLProps<HTMLButtonElement> {}
class MyButton extends React.Component<MyButtonProps, {}> {
    render() {
        return <button/>;
    }
} 

interface MyAwesomeButtonProps extends MyButtonProps {}
class MyAwesomeButton extends React.Component<MyAwesomeButtonProps, {}> {
    render() {
        return <MyButton/>;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

<MyAwesomeButton onClick={...}/>
Run Code Online (Sandbox Code Playgroud)

每当我尝试这种组合时,我都会收到类似于的错误:

foo的属性'ref'不能分配给目标属性.

typescript reactjs tsx

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

如何将外部程序集与Microsoft Azure功能应用程序一起使用?

文件说,你可以把DLL在一个bin文件夹,并使用一种特殊的引用它#r的语法,但是在Azure的门户网站我找不到如何上传这些DLL.这是可能的,如果可以的话,应该如何实现?

azure azure-functions

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

我可以在调用SignIn后使用OWIN修改ASP.NET身份中的声明吗?

SignIn调用后可以在控制器中检索和修改声明吗?这对我不起作用:

ClaimsIdentity i = (ClaimsIdentity)HttpContext.GetOwinContext().Authentication.User.Identity;
i.AddClaim(new Claim("type", "value"));
Run Code Online (Sandbox Code Playgroud)

我需要做的是:登录完成后,用户一直在做其他事情,他们发布一个表单,我需要在此时修改声明并将其重定向到另一个页面.我想知道这是不是因为PRG和饼干,或者只是身份,或者我缺乏知识?

更新:我实际上通过SignIn第二次调用来解决这个问题,这似乎有效,但我猜这有副作用,所以很高兴知道是否有办法修改这些无论如何.

claims-based-identity owin asp.net-identity

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

如何在C#.NET(SQL Server)中正确有效地重用预准备语句?

我看了很多问题,但显然我的SO-fu不能胜任这个任务,所以我在这里.我试图有效地使用预准备语句,我不仅仅意味着参数化单个语句,而是编译一个语句以便重复使用多次.我的问题在于参数和重用以及如何正确实现.

一般来说,我遵循这个程序(人为的例子):

SqlConnection db = new SqlConnection(...);
SqlCommand s = new SqlCommand("select * from foo where a=@a", db);
s.Parameters.Add("@a", SqlDbType.VarChar, 8);
s.Prepare();
...
s.Parameters["@a"] = "bozo";
s.Execute();
Run Code Online (Sandbox Code Playgroud)

超级,有效.但是,每次运行此查询时,我都不想执行所有这些步骤(或后四个步骤).这似乎抵消了准备陈述的整个想法.在我看来,我只需要更改参数并重新执行,但问题是如何做到这一点?

我试过s.Parameters.Clear(),但这实际上删除了参数本身,而不仅仅是值,所以我基本上需要重新Add参数并再次重复Prepare,这似乎也打破了整个点.不用了,谢谢.

在这一点上,我留下迭代s.Parameters并将它们全部设置为null或其他值.它是否正确?不幸的是,在我目前的项目中,我有大约15个参数的查询需要执行〜每次运行10,000次.我可以将这个迭代分流成一个方法但是想知道是否有更好的方法来做到这一点(没有存储过程).

我目前的解决方法是一个扩展方法,SqlParameterCollection.Nullify它将所有参数设置为null,这对我的情况很好.我只是在执行后运行它.


我发现了一些几乎完全相同但(恕我直言)尚未解答的问题:

准备语句和.NET中的内置连接池

SQLite/C#连接池和准备语句混淆(Serge非常接近回答!)

我能找到的最佳答案是(1)上面的常识和(2)这个页面:

http://msdn.microsoft.com/en-us/magazine/cc163799.aspx

.net c# sql sql-server prepared-statement

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

Visual Studio 2015 Git Team Explorer在"更改"窗格中没有"相关工作项"部分

此页面描述了将工作项链接到VS中的提交.我刚刚更新了我的VS,以确保我有最新的东西,它是VS2015更新3,但我的更改窗格中没有相关工作项部分.我们正在使用VSTS,我可以很好地使用Git,我甚至可以使用#语法链接项目到提交,但是看到列表会更有用.

我手动克隆了存储库,它显示在Connect窗格中的"Local Git Repositories"中,这让我觉得VS2015中的某些东西并没有"连接"到VSTS.有没有办法促进这种连接,或者我只需要通过CLI重新克隆它?

visual-studio-2015 azure-devops

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

TypeScript返回参数类型

TypeScript中是否有一种方法可以指示返回是参数的类型,而无需显式声明类型(例如,在通用参数中)?有点像表明它是一个类型识别功能.

例如:

function foo(bar) {
    // ...do crazy stuff to bar...
    return bar;
}
var aString = foo('baz'); // aString is of string type
var aNumber = foo(6); // aNumber is of number type
Run Code Online (Sandbox Code Playgroud)

typescript

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

TypeLite 全新安装不起作用

我刚刚通过 NuGet 将 TypeLite 安装到我的项目中,但它不起作用,我尝试过的一切都没有帮助......这是安装后创建的文件:

<#@ template debug="false" hostspecific="True" language="C#" #>
<#@ assembly name="$(TargetDir)TypeLite.dll" #>
<#@ assembly name="$(TargetDir)TypeLite.Net4.dll" #>
<#@ assembly name="$(TargetDir)$(TargetFileName)" #>

<#@ import namespace="TypeLite" #> 
<#@ import namespace="TypeLite.Net4" #> 
<#@output extension=".d.ts"#>

 <#@include file="Manager.ttinclude"#>
<# var manager = Manager.Create(Host, GenerationEnvironment); #>

<# var ts = TypeScript.Definitions()
        .WithReference("Enums.ts")
        .ForLoadedAssemblies();
#>

<#= ts.Generate(TsGeneratorOutput.Properties) #>

<# manager.StartNewFile("Enums.ts"); #>
<#= ts.Generate(TsGeneratorOutput.Enums) #>
<# manager.EndBlock(); #>
<# manager.Process(true); #>
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Severity    Code    Description Project File    Line
Error       Running transformation: System.Reflection.ReflectionTypeLoadException: Unable to load one …
Run Code Online (Sandbox Code Playgroud)

typelite

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

使用会话拥有的SQL Server sp_getapplock和EF6 DbContexts是否安全?

我想知道使用EF上下文sp_getapplock和会话所有者类型的风险/安全性.基于文档,我的理解是会话所有者意味着如果在此之前没有明确释放,则会话结束时将释放锁定.我假设这也意味着连接结束.

我已经将这一切都用于事务拥有的锁,但这带来了其他问题和复杂性,所以我想知道如何使用会话拥有的锁以及它将如何或不会与行为DbContext及其连接发生冲突处理.

我不是100%确定DbContext默认情况下是如何工作的,无论是使用池还是每个上下文实例都打开并关闭它自己的连接(我读过的文档似乎暗示后者).对于这个问题,假设我没有做任何关于连接管理的事情(我很少这样做),所以EF正在处理它,或处理它的任何处理.

如果我创建一个DbContext实例,抓取连接,执行SQL来创建一个会话拥有的锁,正常使用上下文,释放锁并处理上下文,这会正常工作吗?(实际上,这将是一个IDisposable包装,以防止这种情况,但问题仍然存在.)

为了说明不好:

using (var ctx = new MyContext()) {
    var conn = ctx.Database.Connection.Open();
    conn.ExecuteSqlSomehow("sp_getapplock blahblah");
    try {
        // Lots of queries, savechanges, etc.
    } finally {
        // Oops I forgot to conn.ExecuteSql("sp_release the lock");
    }
}

await WatchMovieAsync();

using (var ctx = new MyContext()) {
    // Can this reuse the same connection, session and/or lock?
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 在处理实例后,另一个上下文可以以某种方式重用我的连接及其会话锁吗?
  2. 就此而言,另一个上下文(例如在另一个线程中)是否可以使用我发出锁定的连接,而原始线程仍然在using块内? …

c# sql-server entity-framework

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