一般问题:在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订阅该集合.)
上面的代码似乎有效,但不知何故对我来说不太合适.问题:
listsObserver.stop()在某个时候打电话处理观察员?若然,何时?(我刚刚开始使用Meteor,所以也许我在其他环境中的偏见正在泄漏.这里隐含的元问题是,我是否正在以正确的方式思考这个问题?)
我的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已经解构了 - 这不是问题.)
要么...?
我正在尝试使用CSS currentColor作为边框颜色来生成CSS三角形,使用:after content.这在我尝试的所有浏览器中都很有效,除了一个:Safari似乎从它生成的第一个三角形缓存currentColor,然后在任何地方使用它.
以下是我所看到的 - Chrome(以及Firefox和IE9 +)的预期行为:

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

这是演示问题的完整代码的小提琴.相关的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) 如果我以编程方式创建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) 我遇到了麻烦的Chrome要注意的柔性基础部分flex: 1 1 25%的flex-direction: column布局.它在row布局中工作正常.
下面的代码片段演示了这个问题:黄色,蓝色和粉红色条形基于柔性基础50px,25%和75%,在列和行弯曲方向上都显示.
如果您在Firefox(或IE11或Edge)中运行它,列和行都按预期划分区域:
但是如果你在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)