小编mga*_*lgs的帖子

反击点击事件冒泡"横向",而不仅仅是"向上"

我在组件中嵌套了click事件处理程序:

class ListItem extends React.Component {
    ...
    render() {
        return (
            <div onClick={this.save}>
              ...Content...
              <span onClick={this.onDeleteClick}> (Delete)</span>
            </div>
        );
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

(这篇文章底部的完整,最小的例子.)

此组件用作包含组件中的"列表项".当我点击(Delete)它时会onDeleteClick按预期触发,这会对父进行回调,从而导致组件从父组件中删除.然后点击事件按预期开始冒泡.但是,它会"向上"到父列表中下一个组件.毕竟,删除处理程序已经删除了原始目标.

如果我添加e.stopPropagation()onDeleteClick处理程序的顶部它一切正常,但我只是想了解为什么点击事件被传递到一个完全不同的组件,只是为了确保那里没有任何其他吸烟枪.

我当前的理论是,挂起事件队列以某种方式索引到虚拟DOM中,如果您在事件处理程序期间改变虚拟DOM,则冒泡事件可能会传递到虚拟DOM中的错误组件.我原本以为鼓泡事件根本不会发射,而不是射击一个完全不同的组件.

这是怎么回事?任何其他见解?这是一个有缺陷的设计,如果是这样,有关替代品的任何建议吗?


以下是显示问题的最小示例:https://codepen.io/mgalgs/pen/dRJJyB

这是固定版本:https://codepen.io/mgalgs/pen/KqZBKp

"修复"的完整差异是:

--- orig.jsx
+++ new.jsx
@@ -32,6 +32,7 @@
     }

     onDeleteClick(e) {
+        e.stopPropagation();
         this.props.onDeleteClick(e);
     }
 }
Run Code Online (Sandbox Code Playgroud)

javascript events reactjs virtual-dom

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

是否每个 dma_map_single 调用都需要相应的 dma_unmap_single?

我正在将大型代码库移植到 Linux 内核设备驱动程序。ASIC 使用大量 DMA 通道。

我 kmalloc 内存与GFP_KERNEL|GFP_DMA. 在启动 DMA 之前,我使用 dma_map_single 来获取硬件(物理)内存地址以提供给硬件。(也会刷新/使 dcache 中的内存无效?)我有时需要 CPU 访问数据,一旦 DMA 完成,但不经常。在通过代码访问数据之前,我执行了 dma_unmap_single 以避免缓存一致性问题。

在我不需要 CPU 访问的情况下,我还需要调用dma_unmap_single吗?我应该dma_unmap_single每一个指针dma_map_single吗?是否dma_map_single消耗dma_unmap_single将释放的资源(例如,表条目)?

DMA-API.txt 不清楚良好的 DMA 内存卫生。

谢谢!

linux linux-device-driver linux-kernel

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

如何调试Django应用程序与gunicorn(可能的竞争条件)服务的间歇性错误?

我有一个Django应用程序与nginx+ gunicorn3 gunicorn工作进程服务.偶尔(可能每100个请求一次)其中一个工作进程进入一个状态,它开始使它服务的大多数(但不是全部)请求失败,然后当它试图向我发送电子邮件时它会引发异常.该gunicorn错误日志是这样的:

[2015-04-29 10:41:39 +0000] [20833] [ERROR] Error handling request
Traceback (most recent call last):
  File "/home/django/virtualenvs/homestead_django/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 130, in handle
  File "/home/django/virtualenvs/homestead_django/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 171, in handle_request
  File "/home/django/virtualenvs/homestead_django/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 206, in __call__
  File "/home/django/virtualenvs/homestead_django/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 196, in get_response
  File "/home/django/virtualenvs/homestead_django/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 226, in handle_uncaught_exception
  File "/usr/lib/python2.7/logging/__init__.py", line 1178, in error
  File "/usr/lib/python2.7/logging/__init__.py", line 1271, in _log
  File "/usr/lib/python2.7/logging/__init__.py", line 1281, in handle
  File "/usr/lib/python2.7/logging/__init__.py", line 1321, in callHandlers
  File "/usr/lib/python2.7/logging/__init__.py", line 749, …
Run Code Online (Sandbox Code Playgroud)

python django gunicorn

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

如果对象已在Django中删除,如何更新或保释

我有一个Django应用程序,将对象保存到数据库中,还有一个芹菜任务,该任务定期对其中一些对象进行一些处理。问题在于,在芹菜任务已选择要处理的对象之后,但芹菜任务实际完成处理并保存之前,用户可以删除对象。因此,当celery任务确实调用时.save(),即使用户删除了该对象,该对象也会重新出现在数据库中。当然,这对于用户来说确实很诡异。

所以这是一些显示问题的代码:

def my_delete_view(request, pk):
    thing = Thing.objects.get(pk=pk)
    thing.delete()
    return HttpResponseRedirect('yay')

@app.task
def my_periodic_task():
    things = get_things_for_processing()
    # if the delete happens anywhere between here and the .save(), we're hosed
    for thing in things:
        process_thing(thing) # could take a LONG time
        thing.save()
Run Code Online (Sandbox Code Playgroud)

我考虑过尝试通过添加原子块和事务来修复它,然后在保存对象之前测试该对象是否确实存在,以进行修复:

@app.task
def my_periodic_task():
    things = Thing.objects.filter(...some criteria...)
    for thing in things:
        process_thing(thing) # could take a LONG time
        try:
            with transaction.atomic():
                # just see if it still exists:
                unused = Thing.objects.select_for_update().get(pk=thing.pk) …
Run Code Online (Sandbox Code Playgroud)

python django locking celery database-locking

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

覆盖我的应用程序之外的单个模型的 django 管理更改表单?

我目前正在change_form.html通过将其放入以下内容来覆盖我的应用程序:

myproject/myapp/templates/admin/change_form.html
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我真的只想覆盖User模型的更改表单,而没有其他任何事情。如果我把它放进去,它似乎不起作用:

myproject/myapp/templates/admin/user/change_form.html
Run Code Online (Sandbox Code Playgroud)

我猜这是因为该User模型不是来自我的应用程序?

在其他应用程序(即应用程序)中覆盖change_list.html特定模型的最干净的方法是什么?django.contrib.auth


相关片段来自settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'unicorn.context_processors.site_url',
                'unicorn.context_processors.consultant_data',
                'unicorn.context_processors.branding',
            ],
            'builtins': ['tracking.templatetags.tracking_extras'],
            'loaders': [
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
            ],
        },
    },
]
Run Code Online (Sandbox Code Playgroud)

django django-templates django-admin

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

如何防止 Google reCAPTCHA (v3) 启用其附加的按钮

我正在将 reCAPTCHA v3 添加到我网站上的用户注册表单中。以前,表单上的提交按钮默认处于禁用状态,并在经过一些验证(ToS 接受等)后启用。但是,当我将 reCAPTCHA 添加到提交按钮时,reCAPTCHA 代码将启用该按钮,这是我不想要的。

我在按钮上设置了一个 DOM 断点,并验证了它确实是启用该按钮的 reCAPTCHA 代码。我还有一个 codepen 演示了这里的问题,其中显示了一个带有 reCAPTCHA 的初始禁用按钮和另一个不带 reCAPTCHA 的初始禁用按钮:

    <button disabled class="g-recaptcha" data-sitekey="..." data-callback="onSubmit">Button w/ reCAPTCHA</button>
    <button disabled>Button w/o reCAPTCHA</button>
Run Code Online (Sandbox Code Playgroud)

带有 reCAPTCHA 的一个由 reCAPTCHA 代码启用,而另一个保持禁用状态。

reCAPTCHA v3 是否有任何配置选项可以避免自动启用其所附加的按钮?

html recaptcha recaptcha-v3

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

在自定义emacs次要模式中轻松显示有用信息 - 模式行难题

背景:

我正在创建一个次要模式,为用户提供关于他们访问的缓冲区是否使用制表符或空格进行缩进的"提示"(只需检查缓冲区中每行的第一个字符).我计划添加的一些功能包括模式行中的信息显示和一些在使用制表符或空格,制表符宽度等之间切换的功能.

我并不真正关心这种次要模式的用处.事实上,如果不存在同样的事情,我会感到惊讶.大多数情况下,这是一种编写小模式的练习.


题:

在启用/禁用我的次要模式时,从模式行插入/删除文本的干净,非突兀的方法是什么?我不希望用户必须修改他们mode-line-format,我只想非破坏性地插入和删除文本.现在我正在使用一个看起来像这样的函数:

(defun update-indent-hints-mode-line (what-this-buffer-loves)
  (let ((indent-hints-mode-line-text (concat " " "[" what-this-buffer-loves "-loving" "]"))
        (my-mode-line-buffer-identification
         (remq " [Tab-loving]" (remq " [Space-loving]" mode-line-buffer-identification))))
    (setq mode-line-buffer-identification
          (add-to-list 'my-mode-line-buffer-identification
                       indent-hints-mode-line-text
                       t))
    (force-mode-line-update)))
Run Code Online (Sandbox Code Playgroud)

它工作正常,但搜索和删除"[Tab-loving]"和"[太空爱好]"似乎非常hackish和丑陋...有一个更清洁的方式来做它?

奖励积分: 对我同样卑微的小模式的卑微开头的任何评论:https: //github.com/mgalgs/indent-hints-mode/blob/master/indent-hints.el 我显然是一个elisp n00b,但我在这里学习.

emacs modeline

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

如何在 DRF 中强制执行 POST 幂等性?

我有一个使用 Django Rest Framework 的 API,我想防止重复POST请求(本着Post Once Exactly (POE)的精神)。特别是,我试图处理的场景是:

  1. 客户端发送 HTTP POST 以创建对象。
  2. API 后端创建对象并将其提交到数据库。
  3. 客户端失去网络连接。
  4. API 后端尝试发回成功响应,但由于客户端丢失网络而无法这样做。
  5. 客户端永远不会得到“成功”响应,因此假设请求失败。客户端重试请求,创建一个重复的对象。

邮件列表上对此进行了一些讨论,但没有具体化代码。人们现在如何解决这个问题?

python django-rest-framework

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

在 pandas 中使用 DataFrame.to_markdown 时如何控制浮动格式?

我正在尝试使用DataFrame.to_markdown包含我想要四舍五入的浮点值的数据框。如果没有to_markdown(),我可以设置pd.options.display.float_format并且一切正常,但to_markdown似乎不尊重该选项。

重现:

import pandas as pd

df = pd.DataFrame([[1, 2, 3], [42.42, 99.11234123412341234, -23]])
pd.options.display.float_format = '{:,.0f}'.format
print(df)
print()
print(df.to_markdown())
Run Code Online (Sandbox Code Playgroud)

输出:

   0  1   2
0  1  2   3
1 42 99 -23

|    |     0 |       1 |   2 |
|---:|------:|--------:|----:|
|  0 |  1    |  2      |   3 |
|  1 | 42.42 | 99.1123 | -23 |
Run Code Online (Sandbox Code Playgroud)

(将表中的 42.42 和 99.1123to_markdown与普通旧 df 中的 42 和 99 进行比较)

这是一个错误还是我缺少有关如何使用的信息 …

dataframe pandas

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

如何从模板中使用django通用视图(CreateView vs UpdateView)进行创建或更新?

我正在为我共享相同的模板CreateViewUpdateView使用django的通用视图.我希望我的模板中的"提交"按钮在我使用时使用"添加"并在我使用时使用CreateView"更新" UpdateView.我的模板中有什么方法可以区分使用哪个视图(CreateViewvs UpdateView)?

我知道我可以使用一个单独的模板template_name_suffix,并将常见的东西放在一个单独的包含或东西中,但只是想看看是否有办法在不创建单独的模板的情况下完成它.

django django-templates django-generic-views

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