我有一个通过has_many通过项目模型关联的任务模型,需要在通过关联删除/插入之前操作数据.
由于" 自动删除连接模型是直接的,因此不会触发销毁回调. "我无法使用回调.
在任务中,我需要所有project_ids在保存任务后计算Project的值.如何通过关联禁用删除或更改删除以销毁has_many?这个问题的最佳做法是什么?
class Task
has_many :project_tasks
has_many :projects, :through => :project_tasks
class ProjectTask
belongs_to :project
belongs_to :task
class Project
has_many :project_tasks
has_many :tasks, :through => :project_tasks
Run Code Online (Sandbox Code Playgroud) 注意:此问题也在此处的 Q.js邮件列表中交叉发布.
我遇到了多个异步操作的情况,我接受的答案指出使用诸如q.js之类的库使用Promise会更有益.
我确信重构我的代码以使用Promises但因为代码很长,我已经修剪了不相关的部分并将关键部分导出到一个单独的repo中.
要求是我希望在遍历所有拖放的文件后,pageSizes不为空.
问题是getSizeSettingsFromPage函数中的FileAPI操作导致getSizeSettingsFromPage异步.
所以我不能放置checkWhenReady(); 像这样.
function traverseFiles() {
for (var i=0, l=pages.length; i<l; i++) {
getSizeSettingsFromPage(pages[i], calculateRatio);
}
checkWhenReady(); // this always returns 0.
}
Run Code Online (Sandbox Code Playgroud)
这有效,但并不理想.在完成所有pages已成功完成此函数calculateRatio 之后,我更喜欢将checkWhenReady调用为ONCE .
function calculateRatio(width, height, filename) {
// .... code
pageSizes.add(filename, object);
checkWhenReady(); // this works but it is not ideal. I prefer to call this method AFTER all the `pages` have …Run Code Online (Sandbox Code Playgroud) 我正在尝试将函数传递给另一个函数,然后执行传递的函数传递给它一个变量.
这是我的代码:
func showStandardPrompt(prompt:String,view: UIViewController,numberInput: Bool, callback: (()->(String))?) {
let alert = UIAlertController(title: "Input Data", message: prompt, preferredStyle: .Alert)
alert.addTextFieldWithConfigurationHandler { (textField) in
if numberInput {
textField.keyboardType = .NumberPad
}
}
let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in
let field = alert.textFields![0] as UITextField
callback?(field.text!)
}
alert.addAction(OKAction)
let CancelAction = UIAlertAction(title: "Cancel", style: .Default, handler: nil)
alert.addAction(CancelAction)
view.presentViewController(alert,animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
callback?(field.text!)
Run Code Online (Sandbox Code Playgroud)
错误是"无法将'String'的值类型转换为期望的参数类型'()'.我知道这是语法问题 - 只是不知道应该是什么.
我正在尝试使用http://abeautifulsite.net/notebook/87中的jQuery警报对话库而不是默认警报(在我看来这看起来非常糟糕).这似乎是一个很棒的库,但是没有一个如何使用jConfirm库的例子.
我需要做这样的事情:
function confirm() {
var result = false;
var response = false;
jConfirm('are you sure?', 'Confirmation Dialog',
function(r) {
result = r;
response = true;
return r;
});
if (response == true) {
alert(result);
return result;
}
else {
//wait for response
alert('hi');
}
}
Run Code Online (Sandbox Code Playgroud)
和我的.net按钮的来电:
我在插件的网站上发布了一条评论(就在今天早上),谷歌搜索了javascript并等待回调完成但没有结果.
在其余的javascript执行之前,有关如何正确使用回调来获取结果的任何想法?
谢谢.
我想通过提供一个调用用户功能的界面,为我的一个模块的用户提供扩展功能的能力.例如,我想让用户在创建类的实例时获得通知的能力,并且在使用它之前有机会修改实例.
我实现它的方法是声明一个模块级工厂函数来进行实例化:
# in mymodule.py
def factory(cls, *args, **kwargs):
return cls(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
然后,当我需要mymodule中的一个类的实例时,我会factory(cls, arg1, arg2)而不是cls(arg1, arg2).
为了扩展它,程序员会在另一个模块中写一个这样的函数:
def myFactory(cls, *args, **kwargs):
instance = myFactory.chain(cls, *args, **kwargs)
# do something with the instance here if desired
return instance
Run Code Online (Sandbox Code Playgroud)
上面回调的安装如下所示:
myFactory.chain, mymodule.factory = mymodule.factory, myFactory
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很简单,但我想知道,作为一名Python程序员,你是否期望一个函数能够注册一个回调而不是一个赋值,或者你是否还有其他方法.我的解决方案对您来说是否可行,惯用且清晰?
我希望尽可能保持简单; 我不认为大多数应用程序实际上需要链接多个用户回调,例如(尽管使用上述模式无限链接"免费").我怀疑他们需要删除回调或指定优先级或订单.像python-callbacks或PyDispatcher这样的模块在我看来就像矫枉过正,尤其是后者,但如果对使用我的模块的程序员有很大的好处,我会向他们开放.
假设我有一个[acme]对象流,我想通过API公开.我有两个选择,回调和迭代器.
// API #1
// This function takes a user-defined callback
// and invokes it for each object in the stream.
template<typename CallbackFunctor>
void ProcessAcmeStream(CallbackFunctor &callback);
Run Code Online (Sandbox Code Playgroud)
// API #2
// Provides the iterator class AcmeStreamIterator.
AcmeStreamIterator my_stream_begin = AcmeStreamIterator::begin();
AcmeStreamIterator my_stream_end = AcmeStreamIterator::end();
Run Code Online (Sandbox Code Playgroud)
API#1从用户手中获取程序的控制流,并且在整个流被消耗之前不会返回(暂时忘记异常).
API#2保留用户手中的控制流,允许用户自己前进流.
API#1感觉更高级别,允许用户立即跳转到业务逻辑(回调函子).另一方面,API#2感觉更灵活,允许用户更低级别的控制.
从设计的角度来看,我应该选择哪一个?我还没有看到更多的利弊吗?未来有哪些支持/维护问题?
我有两个javascript函数
function one () {
do something long... like writing jpgfile on disk
}
function two () {
do something fast... like show the file
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼它(在jQuery中)
one ();
two ();
Run Code Online (Sandbox Code Playgroud)
因为函数二需要来自函数一的链接文件,我需要确保执行完成...所以在函数一的回调中获取函数二应该是技巧..但是如何做到这一点?
注意:我确实在这两个函数之间放了一个警告('aaa')让函数一个完成,并且它工作正常......当警报被注释(删除)时,任何东西都不再有效!
我正在编写一个C#应用程序,它使用Interop服务来访问本机C++ DLL中的函数.我已经使用了大约10种不同的功能.
现在我不知道如何处理将回调作为参数传递,以便DLL可以调用我的代码.
这是DLL的函数原型:
typedef void (WINAPI * lpfnFunc)(const char *arg1, const char *arg2)
Run Code Online (Sandbox Code Playgroud)
并且允许我传递上述类型的函数:
int WINAPI SetFunc(lpfnFunc f)
Run Code Online (Sandbox Code Playgroud)
这是委托和函数定义的C#代码:
public delegate void Func(string arg1, string arg2);
public static void MyFunc(string arg1, string arg2)
Run Code Online (Sandbox Code Playgroud)
这是我的SetFunc Interop函数的C#代码:
[DllImport("lib.dll", CharSet = CharSet.Ansi)]
public static extern int SetFunc(Func lpfn);
Run Code Online (Sandbox Code Playgroud)
最后这里是我调用SetFunc函数并将其传递给我的回调的代码:
SetFunc(new Func(MyFunc));
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的功能应该被调用.SetFunc函数的返回值是返回Success的错误代码,所以要么它没有调用我的函数,要么因为我的代码错误而无法正常工作.
我对Web服务,JAX-WS等都很陌生,所以也许没有问题......
所以,我想实现一个Web服务来使两个系统进行通信."客户端"系统对在"服务器"系统上生成的事件感兴趣.但"客户端系统"本身就是不同应用程序的服务器.服务器是Java(tomcat中的WAR).客户端是.Net.
应该只有一个客户端系统,但客户端系统中有几个客户端进程,每个客户端进程都对不同类别的事件感兴趣.
我将实现服务器端和测试客户端.其他人将实现.Net代码.
运行顺序应该沿着这一行:
首先,这听起来像是可行的吗?
是否有一个标准的内置机制,使用SOAP(服务器上的JAX-WS,客户端的.Net可用的任何东西) - 服务器可以用来从客户端获取回调端点?
例如,我使用RMI做了一些非常相似的事情,在这种情况下,客户端可以只向自己发送远程引用,服务器可以稍后存储ant引用.
最后,是否有一个标准库来存储端点引用,make(集体)回调,并且可能使列表保持最新,删除那些没有响应的客户端,以便进行一些"ping"调用?
为清楚起见,注意:我需要的不仅仅是带回调的异步方法:来自客户端的一条消息将从服务器到客户端生成许多回调消息.
我有以下函数从数据库中获取十六进制代码
function getColour(username, roomCount)
{
connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result)
{
if (err) throw err;
return result[0].hexcode;
});
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我在回调函数中返回结果,但getColour函数不返回任何内容.我希望getColour函数返回值result[0].hexcode.
在我调用getColour时,它不会返回任何内容
我试过做类似的事情
function getColour(username, roomCount)
{
var colour = '';
connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result)
{
if (err) throw err;
colour = result[0].hexcode;
});
return colour;
}
Run Code Online (Sandbox Code Playgroud)
但当然SELECT查询已经在返回值时完成了 colour