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) 我正在试图找出Bootstrap 3并且遇到很多麻烦.Bootstrap 3网站说:
通过将其内容包装在.container中,轻松地将页面内容居中.容器在各种媒体查询断点处设置宽度以匹配我们的网格系统.
请注意,由于填充和固定宽度,容器默认情况下不可嵌套.
前一行似乎支持这一点,因为我不希望嵌套容器将宽度重新设置为超过父级.后一行让我觉得我应该在页面上只有一个容器(或者最多只有兄弟姐妹),不管流体/正常/等等,而不做"额外"的事情.
那是对的吗?
我只是无法绕过这个我想,我已经尝试了大概六次并总是求助于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'不能分配给目标属性.
该文件说,你可以把DLL在一个bin
文件夹,并使用一种特殊的引用它#r
的语法,但是在Azure的门户网站我找不到如何上传这些DLL.这是可能的,如果可以的话,应该如何实现?
SignIn
调用后可以在控制器中检索和修改声明吗?这对我不起作用:
ClaimsIdentity i = (ClaimsIdentity)HttpContext.GetOwinContext().Authentication.User.Identity;
i.AddClaim(new Claim("type", "value"));
Run Code Online (Sandbox Code Playgroud)
我需要做的是:登录完成后,用户一直在做其他事情,他们发布一个表单,我需要在此时修改声明并将其重定向到另一个页面.我想知道这是不是因为PRG和饼干,或者只是身份,或者我缺乏知识?
更新:我实际上通过SignIn
第二次调用来解决这个问题,这似乎有效,但我猜这有副作用,所以很高兴知道是否有办法修改这些无论如何.
我看了很多问题,但显然我的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,这对我的情况很好.我只是在执行后运行它.
我发现了一些几乎完全相同但(恕我直言)尚未解答的问题:
SQLite/C#连接池和准备语句混淆(Serge非常接近回答!)
我能找到的最佳答案是(1)上面的常识和(2)这个页面:
此页面描述了将工作项链接到VS中的提交.我刚刚更新了我的VS,以确保我有最新的东西,它是VS2015更新3,但我的更改窗格中没有相关工作项部分.我们正在使用VSTS,我可以很好地使用Git,我甚至可以使用#
语法链接项目到提交,但是看到列表会更有用.
我手动克隆了存储库,它显示在Connect窗格中的"Local Git Repositories"中,这让我觉得VS2015中的某些东西并没有"连接"到VSTS.有没有办法促进这种连接,或者我只需要通过CLI重新克隆它?
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) 我刚刚通过 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) 我想知道使用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)
问题:
using
块内? …c# ×2
sql-server ×2
typescript ×2
.net ×1
azure ×1
azure-devops ×1
ecmascript-6 ×1
javascript ×1
owin ×1
reactjs ×1
sql ×1
tsx ×1
typelite ×1