我很难理解在以下场景中使用的工作流程:
用户创建模型,我们称之为Product.我们为它们提供了一个表单来填写.由于某些原因除了验证之外的保存错误(超时,访问被拒绝等等)在Ember中,这会使模型进入错误状态.从UI的角度来看,我想要做的就是在屏幕上显示一条消息(简单)并允许用户再次尝试(显然不那么容易).
我已经多次写过它不会重复使用事务.我理解这个的逻辑.对于新产品,我简单地创建另一个新产品,合并来自原始产品(属性,关系)的数据,并用新产品替换我的控制器的内容.虽然可能(希望)有更好的方法,但这并不难,看起来效果很好.
但是,当我编辑产品时,我遇到了一个严重的问题,上述解决方案无效.产品模型现在处于错误状态,我找不到任何方法来获取不同状态的此产品的副本.
我无法弄清楚的是,一旦它遇到错误状态,我可以用这个模型做什么.我尝试过以下方法:
回滚:这不起作用.您无法在错误状态下回滚事务.
重新加载:与上述相同.不允许在错误状态下重新加载记录.
获取记录的新副本:所以我尝试使用与现有记录相同ID的App.Product.find(id).它只是给我一个错误状态的现有记录的副本.
我希望我在这里遗漏一些相当基本的东西.是否可以很好地从错误状态(或无效状态)滚动记录?
如果有一种简单的方法来改变这些模型的状态,我们是否还应该为进一步的提交尝试创建一个新的事务?
我想知道ember中的registerBoundHelper是否曾意味着能够处理块样式的助手.例如,我创建了以下内容:
Ember.Handlebars.registerBoundHelper('unlessUndefined', (context, options) ->
unless typeof context == "undefined"
return options.fn(this)
else
return options.inverse(this)
)
Run Code Online (Sandbox Code Playgroud)
想法是这样使用它:
{{#unlessUndefined choice}}
{{#if choice}}
<p>You chose yes</p>
{{else}}
<p>You chose no</p>
{{/if}}
{{else}}
<p>Make a choice</p>
{{/unlessUndefined}}
Run Code Online (Sandbox Code Playgroud)
option.fn(this)部分内容似乎不呈现任何输出.执行此操作时,我在控制台中收到错误消息:"您无法在呈现过程之外使用appendChild"
如果这是不可能的,也许有人可以建议另一种方法来实现一个条件块,它只显示绑定值是否未定义?
这可能是一堆蠕虫,我会尽力描述这个问题.我们有一个长期运行的数据处理工作.我们的行动数据库会在夜间添加,并处理未完成的操作.处理夜间行动大约需要15分钟.在Vapor 2中,我们使用了大量的原始查询来创建PostgreSQL游标并循环遍历它直到它为空.
目前,我们通过命令行参数运行处理.将来我们希望它作为主服务器的一部分运行,以便在执行处理时检查进度.
func run(using context: CommandContext) throws -> Future<Void> {
let table = "\"RecRegAction\""
let cursorName = "\"action_cursor\""
let chunkSize = 10_000
return context.container.withNewConnection(to: .psql) { connection in
return PostgreSQLDatabase.transactionExecute({ connection -> Future<Int> in
return connection.simpleQuery("DECLARE \(cursorName) CURSOR FOR SELECT * FROM \(table)").map { result in
var totalResults = 0
var finished : Bool = false
while !finished {
let results = try connection.raw("FETCH \(chunkSize) FROM \(cursorName)").all(decoding: RecRegAction.self).wait()
if results.count > 0 {
totalResults += results.count
print(totalResults)
// Obviously …Run Code Online (Sandbox Code Playgroud)