标签: callback

如何通过关联在has_many中使用回调?

我有一个通过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)

ruby-on-rails callback has-many-through ruby-on-rails-3

23
推荐指数
1
解决办法
1万
查看次数

如何使用q.js promises来处理多个异步操作

注意:此问题也在此处的 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)

javascript asynchronous callback task-queue

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

Swift中的回调函数语法

我正在尝试将函数传递给另一个函数,然后执行传递的函数传递给它一个变量.

这是我的代码:

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'的值类型转换为期望的参数类型'()'.我知道这是语法问题 - 只是不知道应该是什么.

function callback ios swift

23
推荐指数
4
解决办法
5万
查看次数

你能等待javascript回调吗?

我正在尝试使用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执行之前,有关如何正确使用回调来获取结果的任何想法?

谢谢.

javascript jquery confirm dialog callback

22
推荐指数
4
解决办法
7万
查看次数

在Python中实现钩子或回调的首选方法是什么?

我想通过提供一个调用用户功能的界面,为我的一个模块的用户提供扩展功能的能力.例如,我想让用户在创建类的实例时获得通知的能力,并且在使用它之前有机会修改实例.

我实现它的方法是声明一个模块级工厂函数来进行实例化:

# 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-callbacksPyDispatcher这样的模块在我看来就像矫枉过正,尤其是后者,但如果对使用我的模块的程序员有很大的好处,我会向他们开放.

python hook factory callback

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

控制反转的利弊

假设我有一个[acme]对象流,我想通过API公开.我有两个选择,回调和迭代器.

API#1:回调

// 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:迭代器

// 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感觉更灵活,允许用户更低级别的控制.

从设计的角度来看,我应该选择哪一个?我还没有看到更多的利弊吗?未来有哪些支持/维护问题?

c++ iterator design-patterns callback inversion-of-control

22
推荐指数
3
解决办法
2510
查看次数

如何在javascript中为函数添加回调

我有两个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')让函数一个完成,并且它工作正常......当警报被注释(删除)时,任何东西都不再有效!

javascript jquery function callback

22
推荐指数
3
解决办法
4万
查看次数

通过Interop/pinvoke传递C#回调函数

我正在编写一个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的错误代码,所以要么它没有调用我的函数,要么因为我的代码错误而无法正常工作.

c# pinvoke interop function callback

22
推荐指数
2
解决办法
1万
查看次数

SOAP Web服务回调架构?

我对Web服务,JAX-WS等都很陌生,所以也许没有问题......

所以,我想实现一个Web服务来使两个系统进行通信."客户端"系统对在"服务器"系统上生成的事件感兴趣.但"客户端系统"本​​身就是不同应用程序的服务器.服务器是Java(tomcat中的WAR).客户端是.Net.

应该只有一个客户端系统,但客户端系统中有几个客户端进程,每个客户端进程都对不同类别的事件感兴趣.

我将实现服务器端和测试客户端.其他人将实现.Net代码.

运行顺序应该沿着这一行:

  1. 服务器正在运行......
  2. 客户端启动对话,"注册"到服务器,并请求一些初始数据.
  3. 服务器保留已注册客户端的端点列表
  4. 在服务器中,有一个监听器在某些事件发生时得到通知.然后,它将浏览已注册客户的列表,并将事件转发给每个客户
  5. 在某些时候,客户端可以"取消注册"不通知服务器它不再想要接收事件.

首先,这听起来像是可行的吗?

是否有一个标准的内置机制,使用SOAP(服务器上的JAX-WS,客户端的.Net可用的任何东西) - 服务器可以用来从客户端获取回调端点?

例如,我使用RMI做了一些非常相似的事情,在这种情况下,客户端可以只向自己发送远程引用,服务器可以稍后存储ant引用.

最后,是否有一个标准库来存储端点引用,make(集体)回调,并且可能使列表保持最新,删除那些没有响应的客户端,以便进行一些"ping"调用?

为清楚起见,注意:我需要的不仅仅是带回调的异步方法:来自客户端的一条消息将从服务器到客户端生成许多回调消息.

.net java web-services callback jax-ws

22
推荐指数
3
解决办法
2万
查看次数

Node.js返回MySQL查询的结果

我有以下函数从数据库中获取十六进制代码

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

mysql callback node.js

22
推荐指数
2
解决办法
6万
查看次数