小编med*_*nds的帖子

在Meteor中,如何在另一个字段更改时更新一个数据库字段?

一般问题:在Meteor中,实现在更新模型时触发的业务逻辑的最佳方式是什么 - 例如,用于更新相关字段或验证或...

具体示例:我想在Meteor todos示例中向Lists集合添加"slug"字段.每当更改列表名称时,slug都需要自动更新.

这就是我所拥有的......我正在观察列表的每个更改,看看是否需要创建/更新其slug.这是在共享的 models.js中(运行服务器和客户端,以获得延迟补偿的好处):

// Lists -- {name: String}
Lists = new Meteor.Collection("lists");

var listsObserver = Lists.find().observe({
    added: updateSlug,
    changed: updateSlug
});

function updateSlug(doc, idx) {
    var slug = (doc.name || '').replace(/\W+/g, '-').toLowerCase();
    if (slug !== doc.slug) {
        console.log("Updating slug for '" + doc.name + "' to " + slug);
        Lists.update(doc._id, {$set: {slug: slug}});
    }
}
Run Code Online (Sandbox Code Playgroud)

(和最初的todos示例一样,server/publish.js将所有内容发布Lists.find()为"lists",client/todos.js订阅该集合.)

上面的代码似乎有效,但不知何故对我来说不太合适.问题:

  1. 像这样观察Lists集合是一种合理的方法吗?它似乎效率低下 - 对Lists文档的任何更改都将触发此代码.
  2. 我应该在客户端进行不同的(模拟)更新,还是可以在两者上运行相同的Mongo/Minimongo更新?
  3. 我是否需要listsObserver.stop()在某个时候打电话处理观察员?若然,何时?

(我刚刚开始使用Meteor,所以也许我在其他环境中的偏见正在泄漏.这里隐含的元问题是,我是否正在以正确的方式思考这个问题?)

meteor

12
推荐指数
1
解决办法
4363
查看次数

使用ImageField和自定义存储,Django"在迁移中没有反映出变化"

我的Django 1.8应用程序使用第三方应用程序(django-avatar),其模型包含ImageField.我也在我的项目的settings.py中使用自定义DEFAULT_FILE_STORAGE(来自django- storages -redux的 S3BotoStorage ).因此,每次运行时manage.py migrate,我都会收到有关头像应用的警告:

您的模型具有尚未在迁移中反映的更改,因此不会应用.运行'manage.py makemigrations'进行新的迁移,然后重新运行'manage.py migrate'以应用它们.

...因为avatar的初始迁移引用了Django的默认FileSystemStorage.运行makemigrations会在头像应用程序中创建一个新的0002迁移,以使其ImageField的存储与我的项目设置相匹配:

...
migrations.AlterField(
    model_name='avatar',
    name='avatar',
    field=models.ImageField(storage=storages.backends.s3boto.S3BotoStorage(), max_length=1024, upload_to=avatar.models.avatar_file_path, blank=True),
),
Run Code Online (Sandbox Code Playgroud)

问题是,这个新的迁移是在我的项目之外的python的site-packages中安装的头像中创建的(因此在git控件之外,不可用于部署等).

在使用自定义DEFAULT_FILE_STORAGE的项目中使用ImageField(或FileField)的第三方应用程序处理迁移的正确方法是什么?我考虑过:

  • 只是忽略警告.迁移到更改存储实际上不会影响数据库模式,并且由于我的项目的DEFAULT_FILE_STORAGE自启动以来一直是S3BotoStorage,因此不需要进行数据迁移.

  • 使用settings.MIGRATION_MODULES将头像的迁移移动到我的项目中.(然后小心地将每个未来的头像迁移移植到我的副本 - 这似乎容易出错.)[编辑:这条关于django-users邮件列表的评论表明这是错误的方法.]

  • 请django-avatar(或django-storages-redux)维护者改变......什么?(顺便说一句,S3BotoStorage已经解构了 - 这不是问题.)

  • 要么...?

django django-storage django-migrations

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

currentColor似乎在Safari中被"卡住"了

我正在尝试使用CSS currentColor作为边框颜色来生成CSS三角形,使用:after content.这在我尝试的所有浏览器中都很有效,除了一个:Safari似乎从它生成的第一个三角形缓存currentColor,然后在任何地方使用它.

以下是我所看到的 - Chrome(以及Firefox和IE9 +)的预期行为:

Chrome截图

来自Yosemite 10.10.2上的Safari 8.0.4的不正确行为(在iOS 8.2上相同) - 请注意所有三个三角形都是红色,而不是其元素的currentColor:

Safari截图

这是演示问题的完整代码的小提琴.相关的CSS:

span {
    display: inline-block;
    border-bottom: 2px solid currentColor;
}

span::after {
    /* Generate a triangle (based on Foundation's css-triangle mixin) */
    content:"";
    display: inline-block;
    width: 0;
    height: 0;
    border: inset 0.4em;
    /* Safari seems to cache this currentColor... */
    border-color: currentColor transparent transparent transparent;
    border-top-style: solid;
}

.red { color: #c00; }
.blue { color: #009; }
Run Code Online (Sandbox Code Playgroud)

HTML很简单:

<div>
    <span class="red">Red</span>
    <span>Default</span>
    <span …
Run Code Online (Sandbox Code Playgroud)

css safari mobile-safari css3

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

404错误尝试使用Facebook测试用户login_url

如果我以编程方式创建Facebook测试用户,login_url则新用户不起作用.获取login_url会返回404错误.

简化示例(在Python中).最后两行是问题出现的地方:

import requests
from urlparse import parse_qs
APP_ID = "<Facebook App ID>"
APP_SECRET = "<Facebook Client Secret>"

# Get app access token - this works
response = requests.get('https://graph.facebook.com/oauth/access_token',
                        params={'grant_type': "client_credentials",
                                'client_id': APP_ID, 'client_secret': APP_SECRET})
app_access_token = parse_qs(response.content)['access_token'][0]

# Create test user - this works
response = requests.post('https://graph.facebook.com/%s/accounts/test-users' % APP_ID,
                         data={'access_token': app_access_token, 'installed': "true"})
test_user = response.json()
login_url = test_user['login_url']
print login_url  # http://developers.facebook.com/checkpoint/test-user-login/...

# Get cookied for login - see https://stackoverflow.com/a/5370869/647002
session = requests.Session()
session.get("https://www.facebook.com/", …
Run Code Online (Sandbox Code Playgroud)

facebook facebook-graph-api facebook-test-users

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

Chrome会忽略列布局中的flex-basis

我遇到了麻烦的Chrome要注意的柔性基础部分flex: 1 1 25%flex-direction: column布局.它在row布局中工作正常.

下面的代码片段演示了这个问题:黄色,蓝色和粉红色条形基于柔性基础50px,25%和75%,在列和行弯曲方向上都显示.

如果您在Firefox(或IE11或Edge)中运行它,列和行都按预期划分区域:

Firefox截图

但是如果你在Chrome(47)或Safari(9.0.3)中运行它,左边的列布局似乎完全忽略了flex-basis - 条形的高度似乎与flex-basis无关:

在此输入图像描述

左右之间的唯一区别是flex-direction.

.container {
  width: 400px;
  height: 200px;
  display: flex;
  background: #666;
  position: relative;
}

.layout {
  flex: 1 1 100%; /* within .container */
  margin: 10px;
  display: flex;
}

.row {
  flex-direction: row;
}
.column {
  flex-direction: column;
}

.exact {
  flex: 1 1 50px;
  background: #ffc;
}
.small {
  flex: 1 1 25%;
  background: #cff;
}
.large {
  flex: …
Run Code Online (Sandbox Code Playgroud)

css webkit google-chrome css3 flexbox

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