小编Jer*_*rey的帖子

避免javascript竞争条件

这是场景:

我的用户被呈现为网格,基本上是电子表格的精简版本.网格中的每一行都有文本框.当他们更改文本框中的值时,我正在对其输入执行验证,更新驱动网格的集合,并重新绘制页面上的小计.这全部由每个文本框的OnChange事件处理.

当他们点击"保存"按钮时,我正在使用按钮的OnClick事件对金额执行一些最终验证,然后将他们的整个输入发送到Web服务,保存它.

至少,如果他们将表单选中到"提交"按钮,则会发生这种情况.

问题是,如果他们输入一个值,那么立即单击保存按钮,SaveForm()在UserInputChanged()完成之前开始执行 - 一个竞争条件.我的代码不使用setTimeout,但我用它来模拟缓慢的UserInputChanged验证代码:

 <!-- snip -->
 <script>
    var amount = null;
    var currentControl = null;

    function UserInputChanged(control) {
        currentControl = control;
        // use setTimeout to simulate slow validation code (production code does not use setTimeout)
        setTimeout("ValidateAmount()", 100); 
    }

    function SaveForm() {
        // call web service to save value
        document.getElementById("SavedAmount").innerHTML = amount;
    }

    function ValidateAmount() {
        // various validationey functions here
        amount = currentControl.value; // save value to collection
        document.getElementById("Subtotal").innerHTML = amount; // update subtotals

    }
</script> …
Run Code Online (Sandbox Code Playgroud)

javascript javascript-events race-condition

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

自定义Visual Studio的Intellisense

最近的一个项目让我再次使用C#,我注意到之前没有的东西--C#的Intellisense显示了调用方法时可能抛出的异常

由于我主要使用VB.NET应用程序,因此在这些应用程序中使用此功能真的很不错,但遗憾的是,它缺少VB的Intellisense

有没有快速简便的方法我可以自定义Visual Studio的Intellisense来显示异常(以及XML注释中的其他成员)?或者我正在使用SDK查看完整修改?

更新:2008年9月29日下午1:49 - 我认为这比简单地更改配置设置更复杂.由于注释是基于XML的,我希望在Visual Studio目录中隐藏一个XSLT文件,但到目前为止还没有任何内容.看起来我将不得不深入研究Visual Studio SDK.

ide customization visual-studio

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

使用vuex时如何在打字稿语法中使用mapState函数?

我在与vuex集成的vuejs项目中使用了Typescript语法。我想使用在.ts文件中计算的mapState方法,但是出现语法错误。目前,我正在针对计算函数使用docs建议的语法,我的意思是:

 get counter(){
    return  this.$store.state.count;
   }
Run Code Online (Sandbox Code Playgroud)

如果您阅读vuex文档,您将知道使用这种方法是重复性的,因此在大型应用程序中使用mapState感到无聊而不是非常容易且有用。所以我想在Typescript组件中使用mapState,但我不知道真正的方法。我尝试了以下使用mapState函数的方法,这是错误的,没有用:

     get mapState({
         counter:count
      })
or
  get mapState(['name', 'age', 'job'])
Run Code Online (Sandbox Code Playgroud)

如果您能帮助我,我将不胜感激。

typescript vuex vuejs2

5
推荐指数
2
解决办法
4205
查看次数

使用 HTML inert 属性时我可以避免惰性吗?

我正在构建包含<dialog>元素的 Web 组件。我使用 打开对话框HTMLDialogElement.showModal(),这会将对话框移动到顶层。对话框的某些内容与顶层不兼容,即 Google Recaptcha,它在对话框下方呈现。

许多其他人已经注意到对话框元素和 ReCaptcha 的相同问题,一种方法似乎是使用HTMLDialogElement.show()而不是 showModal。从可用性的角度来看,我认为这是可以接受的,但从可访问性的角度来看,我真的很喜欢它提供的好处HTMLDialogElement.showModal()。也就是说,使所有其他 HTML 元素变得惰性,从而成为非交互性并从可访问性树中隐藏。通过使用inert特性或属性,我可以自己使 HTML 文档的某个子树变得惰性。

截至今天(2023 年 10 月 31 日),MDNHTML Living 规范都表明“摆脱惰性”是可能的,但这对于 HTML 作者来说似乎不可能。.show()例如,使用 Chrome/Edge,使用以下 HTML,当我尝试通过将对话框的 inert 属性设置为 false 来故意“逃避惰性”时,如果使用打开,我无法与对话框内的元素进行交互。

HTML作者是否可以通过这种方式摆脱惰性?

const dialogOpener = document.getElementById("dialogOpener")
const modalOpener = document.getElementById("modalOpener")
const dialogCloser = document.getElementById("dialogCloser")
const testDialog = document.getElementById("testDialog")

dialogOpener.addEventListener("click", evt => {
  testDialog.show()
  document.body.inert = true
  testDialog.inert = false
})

modalOpener.addEventListener("click", evt => …
Run Code Online (Sandbox Code Playgroud)

html javascript html-inert

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

Castle Windsor:当我的装配无法访问基础类型时,如何注册工厂方法?

我有一个项目,其中我的业务层是使用DI构建的,但我正在尝试额外的步骤并使用Windsor来管理对象构造.

我们只是说我有一个预先存在的数据层(我不想修改),可以通过以下界面访问:

interface IDataFactory {
   IDataService Service { get; }
}
Run Code Online (Sandbox Code Playgroud)

我的业务层中的一系列类依赖于通过IDataFactory公开的服务:

IFactory factory = DataFactory.NewFactory();
IBusinessService service = new ConcreteBusinessService(factory.Service);
Run Code Online (Sandbox Code Playgroud)

我知道为了将IBusinessService注册到Castle Windsor容器,我会使用类似于此的代码:

IWindsorContainer container = new WindsorContainer();
container.AddComponent("businessService", typeof(IBusinessService), typeof(ConcreteBusinessService));
Run Code Online (Sandbox Code Playgroud)

但对于我的生活,我无法弄清楚如何使用我现有的工厂对象从我的数据层注册服务.从本质上讲,我想说:

container.AddComponent("dataService", typeof(IDataService), factory.service);
Run Code Online (Sandbox Code Playgroud)

Windsor似乎要我说容器.AddComponent("dataService",typeof(IDataService),typeOf(SomeConcreteDataService)),但在这个例子中,ConcreteDataService是该程序集的内部,因此在我的程序中不可访问.

鉴于我的程序集不知道SomeConcreteDataService,我将如何进行数据服务的连接?


这个问题与我自己的问题非常类似,除了我的情况,AddComponent("计算器",typeof(ICalcService),typeof(CalculatorService),"Create"); 调用不起作用 - CalculatorService将在另一个程序集内部,不可用于组件连接容器.

c# castle-windsor

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

从数字中删除前导/尾随数字的最佳方法是什么?

如果我有一个像12345这样的数字,并且我想要一个2345的输出,那么有一个数学算法吗?我的黑客想要将数字转换为字符串,并将其子串.我知道这会有效,但我确信必须有更好的方法,谷歌让我失望.

同样,对于12345,如果我想要1234,是否还有另一种算法可以做到这一点?我能想到的最好的是Floor(x / 10^(n)),其中x是输入,n是要剥离的数字,但我觉得必须有更好的方法,而我却看不到它.

language-agnostic algorithm

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

编译.NET程序集时,名称中包含x__的类是什么?

例如:

  • StudentRegistrationService<>c__DisplayClass1
  • <>f__AnonymousType56`2
  • DocShareClassification<GetErrors>d__2

我很确定这StudentRegistrationService<>c__DisplayClass1是一个闭包,并且<>f__AnonymousType56`2在指定匿名类型时生成,但我以前从未见过这个d__类.除了这些还有吗?

.net c#

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